NoSQL强调可用性而不是一致性。有时,这会导致NoSQL数据存储区中的数据变得不一致。
1)从这种情况中恢复的策略是什么?
2)如果可能,有哪些策略可以防止出现这种情况?
3)流行的NoSQL供应商的具体策略是什么,例如MongoDB,CouchDB,Cassandra和HBase?
答案 0 :(得分:4)
我认为在问第3点时你会混合两个不同的问题:
A。数据库变得不可读,即其数据文件已损坏,数据无法访问或部分无法访问
B. 存储在NoSQL数据库中的应用程序数据变得不一致(例如,发生了一些关键的错误匹配),应用程序使用它并且应用程序开始表现得很奇怪。
问题A是数据库可维护性问题,每个数据库都以特定方式处理它(例如,MongoDB)。确实,这不仅仅是NoSQL的问题。但总的来说,这种情况是一种紧急情况,如果你的数据库引擎很稳固且硬件足够好,就不应该发生这种情况。
问题B您的应用程序特定性很差,我认为这里的主要策略是让您的应用程序期望数据在某些时候可能不一致并尽可能地解决这个问题。也可能有一些后台进程发现数据不一致。无论如何,它完全取决于您的数据模型。
编辑: NoSQL数据库中的数据更新不是事务性的,但通常是原子的。因此,如果一个元组由2个不同的进程更新,你将不会从一个元组和另一个元组中获得元组的一部分,您将从引擎被认为是“最后”的其中一个进程获得整个元组。但是,如果您的应用程序更新了几个“依赖”元组,那么几个更新线程的结果当然是不可预测的,因为这些多个更新没有任何事务处理。当然,除非所有的数据都将相同的数据放入数据库中。但是如果你在不同类型的元组/对象之间有太多的依赖,那么我会说你的应用程序以错误的方式使用NoSQL。
编辑:还有一些有趣的讨论here。