MongoDB / Redis / SQL并发模式:多个进程的读取 - 修改 - 写入

时间:2017-06-22 22:54:32

标签: sql mongodb concurrency redis database

这里相对DB新手。

所以我面临一个反复出现的问题,即多个进程尝试对同一个数据库实例进行读 - 修改 - 写操作,无论是MongoDB,Redis还是SQL。

在Redis中,一种解决方案是利用Redis Lua脚本的原子性来保证原子性,但可能会导致将大量应用程序逻辑移到Redis上。 (无论好坏?)

在SQL中,似乎有原子存储过程可以实现类似的结果,但也有可能将过多的应用程序逻辑移入数据库本身(无论好坏?)

MongoDB甚至没有内部脚本的概念(javascript解决方案似乎已被弃用)

然后在一般意义上,如上所述,将数据存储的应用程序逻辑保持在以实现跨多个服务节点的最大应用程序逻辑分布和可伸缩性可能是好的(?)

但是,将应用程序逻辑分布在多个进程(节点)中并让它们同时访问共享数据存储,可以保证读取 - 修改 - 写入周期免受可能的竞争条件的影响。

所以我的问题是:

  1. 对于Redis或SQL,我应该滥用提供的原子脚本支持来完全避免任何可能的竞争,而是将越来越多的应用程序逻辑放入数据存储中,或者
  2. 是大多数DB并发访问更常见的读 - 修改 - 写模型,如果是,是否有一些关于如何从多个进程同步并发读 - 修改 - 写的“标准”指南?
  3. 感谢!

1 个答案:

答案 0 :(得分:0)

Nosql数据库不符合ACID。这些是分布式的nosql数据库。示例 - mongodb,redis,cassandra等这些nosql数据库满足CAP定理的CP或AP部分。符合ACID标准的数据库如RDBMS满足CAP定理的AC部分。

nosql数据库的用例要么重读,要么重写。它主要与性能有关,即速度,高可用性。

希望我很清楚