我有一个应用程序,我的任务是设计一个蒙戈支持的数据存储。
应用程序的目标是以最快的加载时间提供最新数据(无陈旧数据)。
数据大小在几百万左右,应用程序写得很重。
在选择给读取策略一个3节点的复制集(1个主复制集、1个辅助复制集、1个仲裁器)时,我遇到了两种不同的策略来确定从哪里读取数据-
writeConcern = REPLICA_SAFE,从而确保在主写和次写都完成了写操作。设置读取首选项。敬secondaryPreferred。writeConcern= SAFE。读取首选项是默认的- primaryPreferred。在选择其中一个选项之前,需要考虑的是什么。
发布于 2014-02-26 02:19:38
根据文档,安全是一个废弃的术语,应该用承认代替。这里的另一个问题是,这里的w值似乎是这个常量中的2。
这是你的配置的一个问题,因为你有你的主和只有一个二级,再加上一个仲裁者。如果一个节点发生故障,或者无法到达,其级别设置为此,它希望确认来自2节点的所有写操作,其中不会有2节点可用。您可以让写操作以这种方式挂起。
配置的更好的情况是多数派,因为它将确保写入主程序和次要文件的“多数”节点的数量。但是在您的示例中,涉及的任何与写有关的条件都会阻塞上的,如果其中一个节点已关闭或不可用,因为您必须至少有两个E 219辅助节点可用,以便仍然有“大多数”节点来确认写入。或者放弃仲裁器,拥有两个次要节点。
因此,您必须坚持默认的w=1,其中所有的写入都被确认为主写,除非您可以在one备用程序出现故障时处理失败的写入。
您可以将读取首选项设置为secondaryPreferred,只要您接受可以“可能”读取陈旧的数据,也可以不接受数据的最新表示形式,因为唯一的真正保证是对主节点的写入。一般的复制考虑仍然存在,因为节点的处理能力应该是相当的,或者这可能会导致查询操作的滞后或一般性能下降。
请记住,复制是为冗余实现的,而不是用于改进性能的系统。如果您正在寻找性能,那么也许可以考虑扩展您的系统硬件或实现分片来分配负载。
https://stackoverflow.com/questions/22029213
复制相似问题