gpt4 book ai didi

mongodb - NoSQL(MongoDB) 中的提交和磁盘持久化

转载 作者:可可西里 更新时间:2023-11-01 09:58:04 26 4
gpt4 key购买 nike

在 NoSQL 数据库中我们没有事务(提交)所以我想知道数据库如何提交持久性?

当我们告诉 db 只保存对象时,这并不意味着它在磁盘上,刷新缓存应该是磁盘持久化的句柄。我 RDBMS 事务的提交保证数据在磁盘上,那么 MongoDB 或其他 NoSQL 呢?

n,

最佳答案

我想知道这个模因是从哪里来的。首先,由于所有的缓存层,没有真正保证任何东西都被写入实际的 HDD,甚至传统的 RDBMS 也不会一直尝试写入文件,否则它们不会如此速度很快,但细节差异很大(参见示例 adaptive flushing in InnoDB)。

您应该只关心第一层,这本质上是数据库尝试写入磁盘时的问题。现在有第一个缓存层:许多数据库(包括 MongoDB)使用日记而不是写入实际的表/集合:写入将定期合并回实际数据文件的仅附加文件。在发生任何事情并记录在日志中时,你没事。

现在的问题是你是否要写日志以及如何写。在 MongoDB 中,您可以使用 write concern 来控制它,即您可以让您的应用程序代码等待,直到 MongoDB 已将特定写入(或所有写入)写入日志。在 MongoDB 中,如果日志和数据文件在不同的 block 设备上,默认配置下等待日志提交最多需要 10 毫秒,如果它们在同一 block 设备上则为 33 毫秒。如果需要,也可以修改 journalCommitInternval

我收集了一些关于 MongoDB 日志的细节 in another answer .

附带说明一下,持久性与事务并没有太大关系。事务提供隔离和一致性,例如您可以一次更改多项内容,并且保证读者会获得新的或旧的,但不会处于中间状态。换句话说,事务安全数据库可以是根本不写入磁盘的内存数据库。

关于mongodb - NoSQL(MongoDB) 中的提交和磁盘持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com