当前位置: 首页 > 知识库问答 >
问题:

副本集和MongoDB,{w:1}选项是否使系统在CAP方面成为AP?

苏彭薄
2023-03-14

根据CAP定理,MongoDB通常默认定义为CP。在副本集场景中,以下情况是否正确?选项w是写问题:

  • {w:1}:仅等待主服务器的确认。如果我们从次要成员那里读到,系统最终是一致的,然后是AP
  • {w:3}:等待三名成员的确认。如果副本由三个成员组成,则系统是一致的(强?)因此,CP

共有2个答案

松英叡
2023-03-14

我将根据一些证据(比如K先生发布的:mongodb在CAP定理中的地位如何?)为了支持我最初对这个问题的关注,我删除了我对ASIA的评论。

MongoDBs CAP合规性似乎基于哪些写关注点与哪些读关注点放在一起。

让我们举个例子。从主{w: 1}读取的默认配置将是:

  • C因为文字可以立即读取(可能不是因为它不会发送给所有成员,嗯,这是一个思想家)

MongoDB本身可以很好地进行分区容忍(只要每端没有偶数个服务器),而不考虑写操作(即使由于分区而丢失了写操作)。

然而,从具有这种写入问题的二级数据库中读取实际上会导致A,因为MongoDB现在将最终保持一致,并且您将从成员返回陈旧的数据。

使用{w: 3}的3个成员的第二个示例可以完全是CAP:

  • C因为它适用于所有成员

编辑:实际上,在这种情况下,CAP完全丢失,因为MongoDB将停止。

再次编辑:正如Asya指出的那样,MongoDB仍然接受读操作,只是不接受写操作,这意味着它将保持C,但会丢失A,这非常符合当时的标准。

带着所有的担忧。

所以我回到我最初所说的关于读关注点和写关注点的内容(我真的认为它们都有参与),这就是我的答案。

宋经赋
2023-03-14

查看Mongodb复制指南,默认情况下,所有查询都会转到主服务器。如果你想在二级服务器上读“A”,这是AP的要求。然后松开C,因为不同服务器的结果可能不同。

这个问题看起来也是这样,答案可能会有帮助。

 类似资料:
  • 我添加了选项JAVA_OPTS但它似乎不起作用。 我在这个服务器中只安装了JRE 7,所以我只是想知道我是否需要安装JDK 7。 安装在服务器上的JRE如下。 java 版本 “1.7.0_25” Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64 位 Server VM (build 23.25-b01

  • 我的项目使用的是Spring Framework4.0.0 REALESE,可能它不能在JDK1.5版上运行,所以我想把它改成SE1.8。我尝试将我的web项目的JRE系统库从SE1.5更新到1.8。但是我发现从Maven更新项目后,我的项目自动返回到旧版本。我该怎么修好它?

  • 设备类型。Java语言 elemetry.java枚举类 我想获取所有DeviceType Id,其DeviceTeletry名称以“System”(字符串)开头。 我做了这样的事情:- 有谁能告诉我如何从中获取DeviceType Id吗?

  • Hyperledger Composer可以通过使用Loopback API与现有系统集成。集成现有系统使你可以从现有业务系统中提取数据,并将其转换为Composer业务网络中的资产或参与者。 生成一个REST API Hyperledger Composer包含独立的将业务网络暴露为REST API的Node.js进程。LoopBack框架用于生成由Swagger文档描述的Open API。 从

  • 编辑:我认为问题是cfg1-r1和cfg2-r2服务不在同一网络中。当我部署堆栈文件时,会创建一个名为mongo_mongoshard(overlay)的网络,当我检查它时,它只显示cfg1-r1作为其容器列表中的容器。

  • 我有一个带有,(”或)的表单,。。。下拉菜单()。。我想根据填充/检查的输入量显示不同的div。我写这篇文章是为了输入()按id选择输入id,但如何才能对和