Golang mgo驱动指定Mongo服务器读取

icattlecoder · · 1948 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Replica Sets搭建

服务器采用Replica Sets搭建,可参考Deploy a Replica Set

读模式

Mongod的读模式共有五种:

  • primary. 在主节点上进行所有的读操作
  • primaryPreferred. 优先在主节点上进行读操作,如果主节点不可用,再从从节点操作。
  • secondary.所有的读操作在从节点上进行。
  • secondaryPreferred.优先在从节点进行读操作,如果所有从节点都不可用,再从主节点操作。
  • nearest. 根据网络延迟时间 ,就近进行读操作,不考虑节点类型。

配置节点Tags Sets

Tag sets 允许指定一个replica set进行读操作,其中Mongod的读模式必须是以下四种之一:
primaryPreferredsecondarysecondaryPreferrednearest
Tags Sets配置参考:Configure Replica Set Tag Sets
主要操作如下:

conf = rs.conf()
conf.members[0].tags = { "dc": "east", "use": "production"  }
conf.members[1].tags = { "dc": "east", "use": "reporting"  }
conf.members[2].tags = { "use": "production"  }
rs.reconfig(conf)

mgo代码示例

根据以上的配置,如果需要指定从members 1中进行数据库读操作,可采取以下代码:

session, err := mgo.Dial("localhost")
if err != nil {
    log.Fatalln(err)
}
defer session.Close()
session.SetMode(mgo.Eventual, true) //需要指定为Eventual
session.SelectServers(bson.D{{"dc", "east"}, {"use", "reporting"}}) // 指定从1中读取
db := session.DB("test")
col := db.C("tbl")
data := make([]interface{}, 10)
col.Find(nil).Limit(10).All(&data)
log.Println(data)

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:icattlecoder

查看原文:Golang mgo驱动指定Mongo服务器读取

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1948 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传