我读了很多MongoDB文档,但我无法理解readConcern和readPreference选项之间的区别.
例如:如果我在读取关注选项中设置"多数"并将"主要"设置为我的读取偏好选项,结果是什么?这两个选项似乎是矛盾的.
我知道在查询级别我只能设置readConcern首选项,但在客户端级别我也可以设置readPreference.
Ely*_*Ely 12
在副本集中,主MongoDB实例是接收所有写入操作的主实例.
在主要读的偏好是默认模式,涉及MongoDB的客户; 它是一个驱动程序/客户端选项.这意味着您首先从主实例中读取数据(在复制到其他副本集成员之前).
如果使用除主要读取首选项之外的其他模式,则可能会读取过时数据.
Read concern是副本集的查询选项.默认情况下,读取问题是本地的.这将返回查询执行时可用的最新数据.数据可能尚未持久保存到大多数副本集成员,可能会回滚.该选项可以设置为多数,这将使查询读取已保留到大多数副本集成员的最新数据,并且不会回滚.但是,您必须正确设置它(仅适用于WiredTiger引擎和其他一些要求......),您可能会错过最近写入但未持久保存到大多数副本集成员的数据.
假设您使用默认选项来读取首选项和读取问题.然后,您的MongoDB驱动程序将读取请求路由到主副本集成员(主实例),该实例将返回此时可用的最新数据.该数据可能未持久保存到大多数副本集成员,并且可能会回滚.
同样,您可以考虑使用读取关注点和读取首选项选项的不同组合的用例.
MongoDB Doc中描述了这些选项.某些组合在某些情况下可能有意义,而某些其他组合在其他情况下可能有意义.我只是在这里列出它们的完整性.我将其解释如下:
readConcern - 是我们想要从 mongo 读取数据的方式 - 这意味着如果我们有一个副本集,那么 readConcern Major 将允许将数据保存(持久化)到大多数副本集,因此我们可以放心,本文档不会如果复制出现问题,则回滚。
readPreference - 可以帮助平衡负载,因此我们可以有一个报告生成器进程,该进程始终从辅助服务器读取数据,并让主服务器为在线用户提供数据。
归档时间: |
|
查看次数: |
4602 次 |
最近记录: |