2017-06-22 151 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。它主要与速度,高可用性等性能有关。

希望我清楚