如果我触发两个仅相隔1纳秒的更新。是否有可能出现更新不正常的情况?假设第一次更新是否比第二次更复杂。
我知道MongoDB最终是一致的,但我只是不清楚写入的顺序是否得到了保留。
注意:我使用的是一个旧版本MongoDB的遗留系统,它没有更新的事务
在MongoDB中,写操作是文档级的原子操作,因为集合中的每个文档都是独立的&个人独立。因此,当一个操作正在对文档执行写入时,第二个操作必须等待,直到第一个操作完成对文档的写入。
从他们的文档:
写操作在单个文档级别上是原子操作,即使该操作修改单个文档中的多个嵌入文档文件
Ref:mongodb 中的原子性
那么,这什么时候会成为一个问题?-在读取时,如果您的应用程序准备得很重,则会出现这种情况。由于读取可能发生在更新期间-如果您的读取发生在更新完成之前,则您的应用程序将看到旧数据,或者在其他情况下,从次要数据读取也可能导致数据不一致。
一般来说,MongoDB通常作为副本集托管(MongoDB通常是一组至少3个服务器/碎片/节点(,其中的写入必须明确针对主碎片&默认情况下,读取也以主碎片为目标,但如果您将读取偏好覆盖为从辅助碎片读取以使主碎片免费(可能通常用于应用程序报告(,那么您可能会看到很少到零的问题。
但为什么呢?通常情况下,后台数据会从主数据同步到辅助数据,如果在任何情况下延迟或在应用程序读取时没有完成,那么您会看到问题,但可能性可能很低。无论如何,所有这些都是在MongoDB版本4.0
-从4.0
启用二次读取偏好的应用程序将从WiredTiger快照中读取数据之前。
参考:副本集数据同步