在NoSQL数据库中我们没有事务(commit)所以我想知道db如何提交持久性?
当我们告诉db只保存对象时,它并不意味着它在磁盘上,刷新缓存应该处理磁盘持久性.我RDBMS事务的提交保证数据在磁盘上,MongoDB或其他NoSQL怎么样?
N,
我想知道这个模因的来源.首先,由于所有的缓存层,没有什么能真正保证将任何内容写入实际的HDD,甚至传统的RDBMS也不会一直尝试写入文件,否则它们不会那么快,但细节差异很大(例如,参见InnoDB中的自适应刷新).
您应该只关注第一层,这实际上是数据库尝试写入磁盘时的问题.现在有第一个缓存层:许多数据库(包括MongoDB)使用日记功能而不是写入实际的表/集合:写入仅附加文件,该文件将定期合并回实际数据文件.在任何事情发生变化,它都在日记中,你很好.
现在的问题是你是否想写日记以及如何去做.在MongoDB中,您可以使用写入问题来控制它,即您可以让应用程序代码等到MongoDB写入日志以进行特定写入(或所有写入).在MongoDB中,如果日志和数据文件位于不同的块设备上,则等待日志提交最多需要10毫秒(如果日志和数据文件位于不同的块设备上),如果它们位于同一块设备上则为33毫秒.在journalCommitInternval必要时也可以进行修改.
我在另一个答案中收集了关于MongoDB日志的一些细节.
作为旁注,耐久性与交易并没有多大关系.事务提供了隔离和一致性,例如,您可以一次性更改多个内容,并且读者可以保证获得新的或旧的,但不能获得一些中间状态.换句话说,事务安全数据库可以是内存数据库,根本不写入磁盘.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |