MongoDB中是否保留了更新顺序



如果我触发两个仅相隔1纳秒的更新。是否有可能出现更新不正常的情况?假设第一次更新是否比第二次更复杂。

我知道MongoDB最终是一致的,但我只是不清楚写入的顺序是否得到了保留。

注意:我使用的是一个旧版本MongoDB的遗留系统,它没有更新的事务

在MongoDB中,写操作是文档级的原子操作,因为集合中的每个文档都是独立的&个人独立。因此,当一个操作正在对文档执行写入时,第二个操作必须等待,直到第一个操作完成对文档的写入。

从他们的文档:

写操作在单个文档级别上是原子操作,即使该操作修改单个文档中的多个嵌入文档文件

Ref:mongodb 中的原子性

那么,这什么时候会成为一个问题?-在读取时,如果您的应用程序准备得很重,则会出现这种情况。由于读取可能发生在更新期间-如果您的读取发生在更新完成之前,则您的应用程序将看到旧数据,或者在其他情况下,从次要数据读取也可能导致数据不一致。

一般来说,MongoDB通常作为副本集托管(MongoDB通常是一组至少3个服务器/碎片/节点(,其中的写入必须明确针对主碎片&默认情况下,读取也以主碎片为目标,但如果您将读取偏好覆盖为从辅助碎片读取以使主碎片免费(可能通常用于应用程序报告(,那么您可能会看到很少到零的问题。

但为什么呢?通常情况下,后台数据会从主数据同步到辅助数据,如果在任何情况下延迟或在应用程序读取时没有完成,那么您会看到问题,但可能性可能很低。无论如何,所有这些都是在MongoDB版本4.0-从4.0启用二次读取偏好的应用程序将从WiredTiger快照中读取数据之前。

参考:副本集数据同步

最新更新