Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 是日记账+;多数100%安全?_Mongodb_Replication_Journaling_Durability - Fatal编程技术网

Mongodb 是日记账+;多数100%安全?

Mongodb 是日记账+;多数100%安全?,mongodb,replication,journaling,durability,Mongodb,Replication,Journaling,Durability,我一直在读一些关于MongoDB容错的文章,有些人抱怨它永远无法用MongoDB实现(如本文所述:),这让我感到困惑 是否有人可以确认(如果可能,向我展示适当的文档)使用写关注点“日记+多数”足以确保我的驱动程序报告为成功的100%写操作都是持久写的,即使任何副本在写操作之后失败也不会丢失 我说的是3个副本的设置。我同意系统不再接受失败情况下的写入,但当驱动程序报告写入成功时,我需要持久地提交(不管之后失败的副本数量)。正确,因此,如果选择日志写入,基本上就是确保写入已写入单个节点的磁盘。如果选

我一直在读一些关于MongoDB容错的文章,有些人抱怨它永远无法用MongoDB实现(如本文所述:),这让我感到困惑

是否有人可以确认(如果可能,向我展示适当的文档)使用写关注点“日记+多数”足以确保我的驱动程序报告为成功的100%写操作都是持久写的,即使任何副本在写操作之后失败也不会丢失


我说的是3个副本的设置。我同意系统不再接受失败情况下的写入,但当驱动程序报告写入成功时,我需要持久地提交(不管之后失败的副本数量)。

正确,因此,如果选择日志写入,基本上就是确保写入已写入单个节点的磁盘。如果选择执行多数写入,则确保写入到副本集中至少x个节点的内存中

默认情况下,mongodb将每隔100ms从内存刷新到日志。通过让副本节点位于不同的机器(物理或虚拟)上(理想情况下位于不同的数据中心),您不太可能在到达磁盘之前看到一个地理上已分发的副本集中的所有节点都在同一个100毫秒内停机


或者,为了保证写入到单个节点的磁盘,请使用日志写入

如果最多有一个副本,则至少有一个副本将始终具有写操作,即使您没有日志,它也将始终是持久的。事实上,在分布式数据设置出现故障时,使用日志对您没有任何帮助,可能会鼓励手动回滚。回到那篇文章,我刚刚阅读了scim,它的逻辑中有很多缺陷。这是一个叫a的家伙写的。我不明白为什么SQL很慢,b。不理解MongoDB和c的概念。他显然没有阅读文档的许多部分,而是决定抱怨MongoDB附带的默认设置,这对作者没有冒犯,但他的文章只是另一个不知道他们在说什么的人的抨击。他们期望一件事,但实际上得到了另一件事,因为他们没有研究,实际上我改变了我的问题。在任何情况下(即使有两个副本失败),我都不能将写入报告为已成功且未持久写入。那么,您使用的技术是错误的,如果您在SQL中可能需要的所有内容上都要求一致性和可编辑性(ACID)合规性。@Flavien我不会太注意这个讨论,在这些评论中有很多不相关的东西被混淆了。如果您收到对j:true和w:maintal的确认,则表示写入发生在副本集的大部分上,并刷新到主副本集的磁盘上。等待日志确认不是100毫秒的损失,最多33毫秒。fsync间隔是不相关的。最高的数据持久性和高可用性是通过复制而不是磁盘持久性来实现的,因为不能保证磁盘能够经受崩溃,但在辅助磁盘上仍然可用。仅供参考-这篇文章非常不准确。他还为另一家数据库初创公司工作,该公司名为,他可能试图通过抨击其他技术来引起争议。