mgo mode说明
连接池
我们通过 Dial 函数创建一个新的 session:
session, err := mgo.Dial(url)
创建的 session 能够和 MongoDB 集群中的所有服务器通讯。需要注意的是,对于一个集群只需要调用一次 Dial,通过此 Dial 返回的 session 的 New 和 Copy 方法能够创建更多的 session 出来,这些 session 共用底层的连接池(Dial 创建的多个 session 之间使用不同的连接池)。
更为具体的来看下 Strong session(Strong 为一种一致性模式,这里讨论 Strong session 是因为其相对简单,详见下文)。一个 Strong session 会使用一个固定的连接,换而言之,mgo 不会帮你创建更多的连接出来。我们可以通过 session 的 New、Copy 创建出更多的 session 来,这意味着更多的连接能够被建立,且这些连接能够通过内部的连接池被重用。
mgo 提供了一个方法 SetPoolLimit 用于控制正在使用的连接的最大数量,但是实际建立的连接数很可能大于此值。官方文档特别指出,不要使用此来定义应用程序的并发限制(It is a bad practice and an unsupported use case to use the database driver to define the concurrency limit of an application)。SetPoolLimit 无法控制实际建立的连接数,如果希望进行控制,较为稳妥的做法是直接控制 session 的数量。
更多的相关讨论:
https://groups.google.com/forum/#!topic/mgo-users/oVJcXKPvNbU
https://groups.google.com/forum/?fromgroups=#!topic/mgo-users/s1juysWHO8w
一致性模式(consistency mode)
每个 session 都可以设置一致性模式( consistency mode ):
- Strong 一致性模式(默认使用)
- Monotonic 一致性模式
- Eventual 一致性模式
Strong 一致性模式
session 的读写操作总向 primary 服务器发起并使用一个唯一的连接,因此所有的读写操作完全的一致(不存在乱序或者获取到旧数据的问题)。
Monotonic 一致性模式
session 的读操作开始是向某个 secondary 服务器发起(且通过一个唯一的连接),只要出现了一次写操作,session 的连接就会切换至 primary 服务器。由此可见此模式下,能够分散一些读操作到 secondary 服务器,但是读操作不一定能够获得最新的数据。官方更为详细的说明:
In the Monotonic consistency mode reads may not be entirely up-to-date, but they will always see the history of changes moving forward, the data read will be consistent across sequential queries in the same session, and modifications made within the session will be observed in following queries (read-your-writes).
In practice, the Monotonic mode is obtained by performing initial reads on a unique connection to an arbitrary secondary, if one is available, and once the first write happens, the session connection is switched over to the primary server. This manages to distribute some of the reading load with secondaries, while maintaining some useful guarantees.
Eventual 一致性模式
session 的读操作会向任意的 secondary 服务器发起,多次读操作并不一定使用相同的连接,也就是读操作不一定有序。session 的写操作总是向 primary 服务器发起,但是可能使用不同的连接,也就是写操作也不一定有序。Eventual 一致性模式最快,其是一种资源友好(resource-friendly)的模式。
转自: http://name5566.com/5241.html
mgo mode说明的更多相关文章
- golang mgo的mongo连接池设置:必须手动加上maxPoolSize
本司礼物系统使用了golang的 mongo库 mgo,中间踩了一些坑,总结下避免大家再踩坑 golang的mgo库说明里是说明了开启连接复用的,但观察实验发现,这并没有根本实现连接的控制,连接复用仅 ...
- go的mgo,连接未释放问题,连接泄露。
api启动几天后,卡住(连接失败,超时) 异常原因 mongo连接被占满,无法建立mgo连接,返回信息 查询点用端口可知,97%的连接被api项目占用. api项目的mongodb连接“泄露”,某处的 ...
- mgo中DBRef-数据查询测试
下午对数据查询进行了代码测试: package main import ( "crypto/rand" "encoding/hex" "fmt&quo ...
- mgo中DBRef-数据添加测试
2014-1-25 在设计mongo数据库时遇到这样一个问题,日志信息表需要引用人员信息表的数据.如果是结构化数据库,基本上不用想太多的东西.由于刚接触非结构化数据库,按着书上的理解由于日志数量较多, ...
- golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决
问题描述 当使用mgo操作mongodb时,遇到数据插入正常,但是在数据库查看时只能看到objectid被插入了:读取的时候,可以查询到记录,但是读入对象时,却所有的值均为0或者空的情况. mongo ...
- MacOS下安装gdb、mgo
安装gdb:http://blog.panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/ 注意最后两步: killall ...
- 安装golang的mongodb驱动mgo速记
这里介绍的方法只适用于Centos平台,测试版本为centos 6.5 下载源码安装实在麻烦,这里采用比较简单的方法给GO安装mongodb驱动 安装mgo之前,需要先安装bzr yum -y ins ...
- mgo 的 session 与连接池
简介 mgo是由Golang编写的开源mongodb驱动.由于mongodb官方并没有开发Golang驱动,因此这款驱动被广泛使用.mongodb官网也推荐了这款开源驱动,并且作者在github也表示 ...
- PICE(5):MongoDBStreaming - gRPC -MGO Service
我在前面提到过MongoDB不支持像SQL般字符式的操作指令,所以我们必须对所有的MongoDB操作指令建立protobuf类型才能支持MongoDB指令的序列化.在对上一篇博文里我们把MongoDB ...
随机推荐
- Eclipse使用Maven搭建Java Web项目,并直接部署Tomcat
1.环境: win10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven环境还是要 ...
- ArcMap登录和ArcGIS online都是灰色,无法连接网络的解决方法
此问题可能由多种原因造成,表现为系统托盘中的 ArcGIS Online 地球图标断开连接(显示红色×). 解决方法: 方法一: 在系统托盘中的 ArcGIS Online 地球图标右键单击此图标 & ...
- MySQL C API概述
以下列表总结了C API中可用的功能.有关更多详细信息,请参见 第27.8.7节“C API函数描述”中的说明. my_init():在线程安全程序中初始化全局变量和线程处理程序 mysql_affe ...
- web-hacking
https://wizardforcel.gitbooks.io/web-hacking-101/content/1.html
- 简单linux命令1
1. cat 一次显示整个文件: cat filename 从键盘创建一个文件: cat> filename 将文件合并: cat file1 file2 > filename 2. ...
- HttpClient 测试web API上传文件实例
1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) 效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 Sql代码 --oracle汉字转拼 ...
- [C++]PAT乙级1010. 一元多项式求导 (25/25)
/* 1010. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:x^n(n为整数)的一阶导数为n*x^n-1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1 ...
- 第26月第20天 springboot
--------------------- 1.pom.xml中添加支持web的模块: <dependency> <groupId>org.springframework.bo ...
- 事件代理on
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...