【发布时间】:2015-04-03 02:29:45
【问题描述】:
由于 Mongo 没有可用于确保不会向数据库提交任何内容的事务,除非其一致(非损坏)数据,如果我的应用程序在写入一个文档和进行相关写入之间死亡另一个文档,我可以使用哪些技术来删除损坏的数据和/或以某种方式恢复?
【问题讨论】:
-
原子数据应始终准确写入一个文档。虽然这并不总是可能的(这很可能表明 MongoDB 是不适合使用的 DBMS),但适当的数据建模通常会提供解决方案。请描述您的用例并向我们展示您的数据模型——通常可以找到解决方案。
-
感谢您提供的帮助,但我正在寻找更通用的技术。如果你能用几个不同的例子来写一个答案,那就太好了,每个例子都展示了不同的“正确的数据建模”技术(也许一个展示了 Mongo 肯定是错误的 DBMS)。
-
那将超出范围。为 MongoDB 写一本关于数据建模的书相对容易;)一般来说:将原子数据写入一个文档。一个例子是为一个网上商店编写一个订单文件,其中包括给定时间点的价格。如果应用程序死了,不会造成任何伤害,除了立即订单文件的丢失,这应该很容易重新创建篮子。没有用例和对象的属性,几乎有无限可能。
-
是的,如果您尝试用“我有一个带有购物车的网上商店等等等等...但我不认为要求列出一般类型问题及其解决方案的范围。
-
例如,适合我部分情况的示例是我有一个权限文档,该文档定义了有权访问我的主数据文档的用户列表。在这种情况下,灾难性故障可能会留下未使用的权限文档,或者在数据文档中留下错误的 _id。这里的解决方案是先创建 Permission,然后将其 _id 写入 Data 文档,因为拥有未使用的 Permission 比在 Data 文档中拥有错误的 _id 更好。这就是我所说的泛化。有哪些场景?它不需要详尽
标签: mongodb corruption