MongoDB读操作事务


MongoDB 读操作事务

一、综述

  1. 在读取数据的过程中我们需要关注以下两个问题:
    • 从哪里读?关注数据节点、位置
    • 什么样的数据可以读?关注数据的隔离性
  2. 第一个问题是是由 readPreference 来解决
  3. 第二个问题则是由 readConcern 来解决

二、什么是 readPreference?

readPreference 决定使用哪一个节点来满足正在发起的读请求。
可选值包括:

  • primary:只选择主节点(默认值);
  • primaryPreferred:优先选择主节点,如果不可用则选择从节点;
  • secondary:只选择从节点;
  • secondaryPreferred:优先选择从节点,如果从节点不可用则选择主节点;
  • nearest:选择最近的节点(ping);

image.png

三、readPreference 场景举例

  • 用户下订单后马上将用户转到订单详情页——primary/primaryPreferred。因为此时从节点可能还没复制到新订单;
  • 用户查询自己下过的订单——secondary/secondaryPreferred。查询历史订单对时效性通常没有太高要求;
  • 生成报表——SRcondary。报表对时效性要求不高,但资源需求大,可以在从节点单独处理,避免对线上用户造成影响;
  • 将用户上传的图片分发到全世界,让各地用户能够就近读取——nearest。每个地区的应用选择最近的节点读取数据。

四、readPreference 配置

通过 MongoDB 的连接串参数:

  • mongodb://host1:27107,host2:27107,host3:27017/?replicaSet=rs&readPreference=secondary

通过 MongoDB 驱动程序 APl:

  • Mongocollection.withReadPreference(ReadPreference readPref)

Mongo Shell:

  • db.collection.find({}).readPref(“secondary”)

文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录