什么操作订单保证没有耐用性(mongo)?

时间:2011-11-07 19:50:18

标签: mongodb acid

假设您有一个ACID数据库。如果没有关于操作排序的明确保证,您仍然可以推断出因耐久性而导致的排序。

e.g。

  1. 我将x插入数据库,语句返回
  2. 现在我插入y
  3. 由于持久性保证,我知道在x之前y已经变得持久。
  4. 因此,如果发生崩溃,我要么:

    1. 数据库中没有xy
    2. x
    3. xy
    4. 现在假设数据库具有宽松的持久性保证。例如没有safemode或getlasterror的MongoDB。

      在第二次操作持久之前,我有什么保证第一次操作是持久的? 请指出我声称这个或相应测试的文档部分 如果发生故障,我的数据库可以包含y但不包含x吗?

      编辑:
      似乎默认(仅?)存储机制是内存映射文件引擎。如果未启用日记功能(默认情况下已启用),则服务器崩溃似乎可能导致不一致且无法修复的状态。我想答案就在日记中。

2 个答案:

答案 0 :(得分:2)

回答我自己的问题:

保证有日记功能。具体来说,期刊是write-ahead重做日志。

  

启用日记功能后,日记文件将在日记/中创建   您选择的数据库路径下的子目录。这些文件是预写   重做日志。另外,最后的序列号文件journal / lsn将会   被创造。干净关闭会删除日志/.

下的所有文件

来源:http://www.mongodb.org/display/DOCS/Journaling#Journaling-JournalFiles

没有日记,我无法保证(我能找到或理解)。 MongoDB使用内存映射文件作为主存储引擎。写入内存不会立即反映在文件系统中。如果操作系统崩溃(例如),文件可能处于不一致且不可恢复的状态。

答案 1 :(得分:1)

根据您的使用情况,您可以使用Mongo的Capped Collections来维护集合中对象的插入顺序。但是有一些限制,请查看文档。

您还可以从Sorting and Natural Ordering获得更多信息:

对于标准表,自然顺序并不是特别有用,因为虽然订单通常接近于订单,但并不保证。但是,对于Capped Collections,自然顺序保证为插入顺序。