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

Mongo-读取偏好设计策略

翟曦
2023-03-14

我有一个应用程序,我的任务是设计一个mongo支持的数据存储。

应用程序的目标是以最快的加载时间提供最新数据(无陈旧数据)。

数据大小约为数百万,应用程序写入量很大。

在选择给定3节点副本集(1个主副本集、1个辅助副本集、1个仲裁服务器)的读取策略时,我遇到了两种不同的策略来确定从哪里读取源-

>

  • 从次级读取以减少主级的负载。使用Write关注=REPLICA_SAFE,从而确保写入在主级和次级上都完成。设置读取首选项。到次要首选项

    总是从小学开始读。但在读取之前,请确保数据处于原始状态。所以设置writeConcern=SAFE。读取首选项为默认值-primaryPreferred

    在选择其中一个选项之前,需要考虑哪些事情。

  • 共有1个答案

    梁丘逸仙
    2023-03-14

    根据留档REPLICA_SAFE是一个不建议使用的术语,应该用REPLICA_ACKNOWLEDGED替换。这里的另一个问题是这里的w值似乎是这个常量的2。

    这是您的配置的问题,因为您有主节点和只有一个辅助节点,并结合了一个仲裁器。如果节点出现故障或无法访问,级别设置为这样,它希望确认来自2个节点的所有写入,其中没有2个节点可用。您可以通过这种方式保留写入操作。

    对于您的配置来说,最好的情况是多数,因为无论节点的数量如何,它都将确保写入主节点和“多数”辅助节点。但在您的情况下,如果一个节点关闭或不可用,任何涉及超过主节点的写问题都将阻止所有写操作,因为您必须至少有两个辅助节点可用,以便仍有“大多数”节点确认写操作。或者放弃仲裁器,拥有两个辅助节点。

    因此,您必须坚持默认的w=1,其中所有写入都被确认给PRIMARY,除非您可以在一个SECONDARY出现故障时处理写入失败。

    您可以将读取首选项设置为secondary preferred,只要您接受可以“可能”“是否读取过时数据的最新表示形式,因为唯一真正的保证是对主节点的写入。一般的复制注意事项仍然存在,即节点的处理能力应该在一定程度上相等,否则这可能会由于查询操作而导致延迟或总体性能下降。”。

    请记住,复制是为了冗余而实现的,而不是提高性能的系统。如果您正在寻找性能,那么也许可以考虑扩展您的系统硬件或实现分片以分配负载。

     类似资料:
    • 通用设置 打开软件时 打开 Sketch 时,你需要创建一个新的文件,或者选择现有文件。 撤销 Sketch 会将多个相似的操作视为一组,比如你连续多次按下方向键以移动图层,但是只需一次撤销,即可恢复原来的位置。 字体渲染 当你为 Mac 或网页设计时,你会想打开子像素抗锯齿效果,但是为 iOS 设计时,你会想关掉它。 矢量导入 这个选项让你在导入 PDF 或者 EPS 的时候告诉 Sketch,

    • Navicat Data Modeler 提供一些选项让你自定义用户界面和性能。 若要打开偏好设置窗口,从菜单栏选择“Navicat Data Modeler”->“偏好设置”。

    • Navicat 为所有工具提供完整的自定义用户界面选项。 若要打开偏好设置窗口,请从菜单栏选择“Navicat XXX”->“偏好设置”。

    • 偏好设置 面板中提供了编辑器的个性化设置,要打开 偏好设置 面板,请从主菜单的 Cocos Creator 3D -> 偏好设置 菜单进入。 设置可以分成下列几部分: 通用设置 通用设置主要是针对编辑器相关的一些基础数据进行配置。 编辑器语言:可以选择中文或英文,修改语言设置后要重新启动 Cocos Creator 才能生效。 选择本机 IP 地址:用户可以在本机有多个 IP 地址的情况下,手动选

    • 当我们把Git的环境配好,在Android Studio的偏好设置中只需要使用默认的配置就可以了。一般不需要特殊配置,但也不排除你有特殊的需求,那下面我们就介绍下Git的偏好设置。 设置步骤: 偏好设置: Version Control —> Git Path to Git executable: Git执行路径,这里使用的是默认路径,如果你自定义了Git路径,这里要记得攺一下, 不然会报错的.

    • 9. 策略(Strategy) Intent 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 Class Diagram Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy)