Mongodb 如何使用Mongo DB处理应用程序死亡和其他中间操作故障
由于Mongo没有事务可用于确保数据库没有提交任何内容,除非其数据一致(未损坏),如果我的应用程序在写入一个文档和相关写入另一个文档之间死亡,我可以使用什么技术来删除损坏的数据和/或以某种方式进行恢复?NoSQL背后更伟大的想法是针对特定问题使用精心建模的数据结构,而不是用锤子敲打每个问题。对于事务来说也是如此,它应该被称为“短命事务”,因为典型的RDBMS事务对“真实的”长命事务几乎没有帮助 RDBMS支持的事务类型通常是必需的,因为有限的数据模型迫使您跨多个表存储数据,而不是使用嵌入式数组(想想典型的发票/发票项示例) 在MongoDB中,尝试使用写重、非规范化的数据结构,并将数据保存在单个文档中,这样可以提高读取速度、数据局部性并确保一致性。这样的数据模型也更易于扩展,因为单个只读访问单个服务器,而不必从多个源收集数据Mongodb 如何使用Mongo DB处理应用程序死亡和其他中间操作故障,mongodb,corruption,Mongodb,Corruption,由于Mongo没有事务可用于确保数据库没有提交任何内容,除非其数据一致(未损坏),如果我的应用程序在写入一个文档和相关写入另一个文档之间死亡,我可以使用什么技术来删除损坏的数据和/或以某种方式进行恢复?NoSQL背后更伟大的想法是针对特定问题使用精心建模的数据结构,而不是用锤子敲打每个问题。对于事务来说也是如此,它应该被称为“短命事务”,因为典型的RDBMS事务对“真实的”长命事务几乎没有帮助 RDBMS支持的事务类型通常是必需的,因为有限的数据模型迫使您跨多个表存储数据,而不是使用嵌入式数组(
然而,在某些情况下,数据必须在各种上下文中读取,并且去规范化变得不可行。在这种情况下,您可能希望查看或选择一种完全不同的并发方法,例如(在一句话中,svn、git等都是这样做的)。然而,后者很难取代RDBMs,但如果不是用户的话,它会向更高级别的应用程序(如果不是用户的话)暴露出一种完全不同的并发性。考虑到这一点,我想确定一些类型的影响:
如果上述类型的代码分析或损坏修复变得不可行,或者如果您想避免任何数据损坏,您的最后手段将是采纳mnemosyn的建议并实施,或者类似的东西,允许您在不确定状态下识别和回滚更改。原子数据应始终写入一个文档中。虽然这并不总是可能的(这很可能表明MongoDB是错误的DBMS),但适当的数据建模通常提供了一个解决方案。请描述您的用例并向我们展示您的数据模型–通常可以找到解决方案。我感谢您提供的帮助,但我正在寻找更通用的技术。如果你能用两个不同的例子写出一个答案,每个例子都展示了一种不同的“适当的数据建模”技术,那就太好了(也许还有一个例子展示了Mongo将在哪里进行建模)