【问题标题】:Are bulk inserts atomic in MongoDBMongoDB中的批量插入是原子的吗
【发布时间】:2016-03-10 17:21:48
【问题描述】:

我正在学习 mongodb。如果我创建批量写入,此事务是全部还是全部?我有一个场景,我的用户可以删除他们的朋友。

FRIEND 1  |  FRIEND 2
  User B     USER A
  User A     USER B

为此,我需要从两个双向关系中删除。为了保持一致性,我需要将这些作为全部或全部发生,因为我不希望 2 个操作中只有 1 个成功,因为这会导致错误数据。阅读文档我找不到答案:

https://docs.mongodb.org/manual/core/bulk-write-operations/

【问题讨论】:

  • 相关:Are Bulk Operations Written to the Op-Log as a whole?。但是任何成功的东西都会被写入,因为没有内置的“回滚”概念。还要注意的是,“无序”操作批次将写入每个没有错误的操作,而不是“有序”,其中写入将在第一个错误时停止。

标签: mongodb atomic bulkinsert


【解决方案1】:

db.collection.initializeOrderedBulkOp() “如果在处理其中一个写入操作期间发生错误,MongoDB 将返回而不处理列表中的任何剩余的写入操作。”

没有提到回滚操作,只是停止插入剩余的操作。

db.collection.insert() 方法 "The insert() method, when passed an array of documents, performs a bulk insert, and inserts each document atomically."

你可以自己滚动。但使用 acknowledged write concern 必须通过您选择的驱动程序。 shell 已确认,但驱动程序可能未确认。

https://docs.mongodb.org/manual/core/write-concern/

try
   insert 1
catch 
  delete

try
   insert 2
catch 
  delete 1
  delete 2

【讨论】:

  • 啊谢谢!所以看起来它不是原子的,只有个别请求是原子的。
  • 有一些 nosql 是事务性的,也就是酸性的。 orientdb 和 neo4j 但我个人会使用一些简单的 try catch if null appl logic
  • mongo 4.0 支持 ACID!
猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 2021-01-20
  • 2011-02-22
  • 2013-11-07
  • 2013-05-21
  • 2013-07-12
  • 2017-10-05
  • 2013-05-19
相关资源
最近更新 更多