所以我一直试图将这个问题包围好几个星期,但我似乎无法弄明白。所以MongoDB没有能力处理回滚,因为我们通常理解它们(例如,当客户端向数据库添加信息时,例如用户名,但在注册过程中退出。现在DB留下了一些“悬挂“与任何事物无关的信息.MongoDb如何处理?或者如果没有人能回答这个问题,也许他们可以指出一个可以来源的例子?谢谢。
答案 0 :(得分:0)
MongoDB
不支持事务,您不能执行原子多语句事务以确保一致性。您一次只能对单个集合执行原子操作。在处理NoSQL
数据库时,您需要尽可能多地验证数据,他们很少抱怨某些事情。有一些解决方法或模式可以实现SQL
类交易。例如,在您的情况下,您可以将用户的信息存储在临时集合中,检查数据有效性,然后将其存储到用户的集合中。
这应该是直截了当的,但是当我们处理多个文档时,事情变得更加复杂。在这种情况下,您需要为事务创建指定的collection
。例如,
transaction collection
{
id: ..,
state : "new_transaction",
value1 : values From document_1 before updating document_1,
value2 : values From document_2 before updating document_2
}
// update document 1
// update document 2
Ooohh喔!!更新document 1 or 2
时出了什么问题?不用担心,我们仍然可以从transaction collection
恢复旧值。
此模式称为补偿,以模仿SQL
的事务行为。