2017-06-22 149 views
0

相對DB新手在這裏。MongoDB/Redis/SQL併發模式:讀取 - 修改 - 多個進程寫入

因此,我面臨一個反覆出現的問題,即多個進程嘗試對相同數據庫實例(無論是MongoDB,Redis還是SQL)進行讀 - 修改 - 寫操作。

在Redis中,一種解決方案是利用Redis Lua腳本的原子性來保證原子性,但可能會導致將相當數量的應用程序邏輯移動到Redis上。 (無論是好的還是壞的?)

在SQL中,似乎有一些能達到類似的效果原子存儲過程,而且還冒着太多的應用邏輯移動到數據庫本身(無論是好的還是壞的?)

的MongoDB甚至不真的有內部腳本的概念(JavaScript解決方案似乎是不建議使用)

然後在一般意義上,如上提示,它可能是很好的(?),以確保應用程序邏輯數據存儲以實現跨多個服務節點的最大應用邏輯分佈和可擴展性。但是使應用程序邏輯分佈在多個進程(節點)上並讓它們同時訪問共享數據存儲區,這保證了讀 - 修改 - 寫週期可以避免可能的競爭條件。

所以我的問題是:

  1. 對Redis的或SQL,我應該濫用提供的原子腳本支持,以完全避免任何可能的競爭,而是把越來越多的應用程序邏輯到數據存儲,或
  2. 是讀取 - 修改 - 寫入模型對於大多數數據庫併發訪問更常見,如果是,是否存在一些關於如何同步多個進程的併發讀取 - 修改 - 寫入的「標準」指南?

謝謝!

回答

0

Nosql數據庫不符合ACID標準。這些是分佈式nosql數據庫。示例 - mongodb,redis,cassandra等這些nosql數據庫滿足CAP定理的CP或AP部分。像RDBMS這樣的符合ACID的數據庫滿足CAP定理的AC部分。

用於nosql數據庫的用例不是重讀就是重寫nit。它主要與速度,高可用性等性能有關。

希望我清楚