假设您有一个ACID数据库。如果没有关于操作排序的明确保证,您仍然可以推断出因耐久性而导致的排序。
e.g。
x
插入数据库,语句返回y
x
之前y
已经变得持久。因此,如果发生崩溃,我要么:
x
或y
x
x
和y
。现在假设数据库具有宽松的持久性保证。例如没有safemode或getlasterror的MongoDB。
在第二次操作持久之前,我有什么保证第一次操作是持久的?
请指出我声称这个或相应测试的文档部分
如果发生故障,我的数据库可以包含y
但不包含x
吗?
编辑:
似乎默认(仅?)存储机制是内存映射文件引擎。如果未启用日记功能(默认情况下已启用),则服务器崩溃似乎可能导致不一致且无法修复的状态。我想答案就在日记中。
答案 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,自然顺序保证为插入顺序。