文档章节

mgo 如何实现读写分离

ricktian1226
 ricktian1226
发布于 2014/11/19 10:08
字数 615
阅读 738
收藏 3
点赞 0
评论 0

参照mgo的session.SetMode函数的说明:

func (*Session) SetMode

func (s *Session) SetMode(consistency mode, refresh bool)

SetMode changes the consistency mode for the session.

SetMode函数用来变换session的一致性模式。

In the Strong consistency mode reads and writes will always be made to the primary server using a unique connection so that reads and writes are fully consistent, ordered, and observing the most up-to-date data. This offers the least benefits in terms of distributing load, but the most guarantees. See also Monotonic and Eventual.

在强一致模式下,读写都是在主节点上通过同一个连接实现,这样读写是完全一致、有序并且是最新的数据。这种模式在分布式负载架构下没有多少益处,但是保证了读写数据的一致性。再看看Monotonic 和Eventual模式。

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).

Monotonic一致模式下,读到的数据不一定是最新的,但是在同一个session中的一系列读保持着数据一致性,而session中的修改在其后的查询中可以得到体现,

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.

In the Eventual consistency mode reads will be made to any secondary in the cluster, if one is available, and sequential reads will not necessarily be made with the same connection. This means that data may be observed out of order. Writes will of course be issued to the primary, but independent writes in the same Eventual session may also be made with independent connections, so there are also no guarantees in terms of write ordering (no read-your-writes guarantees either).

The Eventual mode is the fastest and most resource-friendly, but is also the one offering the least guarantees about ordering of the data read and written.

If refresh is true, in addition to ensuring the session is in the given consistency mode, the consistency guarantees will also be reset (e.g. a Monotonic session will be allowed to read from secondaries again). This is equivalent to calling the Refresh function.

Shifting between Monotonic and Strong modes will keep a previously reserved connection for the session unless refresh is true or the connection is unsuitable (to a secondary server in a Strong session).

总结下来,如下表格所示:


Strong Monotonic Eventual
read read to primary server read to arbitrary secondary
read to any secondary
write write to primary server
write to primary
write to primary
connection unique
unique independent
guarantee
the most some useful the least

strong可靠性最强,eventual对读写分离的性能提升最强。具体使用时根据业务需要进行权衡。

© 著作权归作者所有

共有 人打赏支持
ricktian1226
粉丝 0
博文 7
码字总数 2728
作品 0
厦门
关于golang mgo用户提交注入风险

我在网上找了一下,关于mongodb确实存在注入风险。 但在golang中mgo,如果没有对用户提交数据进行有效过滤,仅使用mgo的bson.M查询,是否也会出现被注入的风险? bson.M{"_id",userPostID 如...

fotomxq
2016/12/19
154
1
go 使用mongodb

mongodb官方没有关于go的mongo的驱动,因此只能使用第三方驱动,mgo就是使用最多的一种。 官网:http://labix.org/mgo 文档:http://godoc.org/gopkg.in/mgo.v2 等下继续补充。。。。。 mgo使...

solate
2016/12/13
36
0
redis在cluster模式下如何实现读写分离?

根据redis官方资料描述,通过slaveof的方式配置主从模式,可以实现读写分离,即主节点实现写,从节点实现读; 但是如果使用cluster模式启动,通过如下方式来创建集群,并自动分配主从关系,启...

sunshinexs
2015/05/25
877
2
Amoeba for Mysql 如何

http://www.oschina.net/bbs/thread/10387 这是红薯发的一篇文章,现在项目中想使用 Amoeba进行mysql的读写分离,有经验的哥们给点意见, 这个软件如何。或者有其他的实现读写分离方式。 my...

rigger
2011/04/23
781
4
用过mgo的同学进来指点一下,如何将一个json直接存储到mongoDB中

RT,mgo存储的方式貌似是先转化为struct然后用Insert存储入mongoDB。 但如果我抓到的直接是json,先转化为struct然后再存入不是多此一举吗(mongoDB本身就可以直接存储json啊)? 而且抓到的jso...

神州浪子
2014/10/08
1K
1
MySQL中间件之ProxySQL(10):读写分离方法论

返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.不同类型的读写分离 数据库中间件最基本的功能就是实现读写分离,ProxySQL当然也支持。而且ProxySQL支持的路由...

骏马金龙
前天
0
0
Laravel 5 配置数据库主从读写分离和源码分析

一,配置过程: Laravel5读写分离配置比较简单,只需修改config/database.php,下面以MySQL数据库为例 内容如下 'mysql' => [ ] 设置完毕之后,Laravel5默认将select的语句让read指定的数据库...

李佳顺
05/31
0
0
分析型数据仓库中读写分离的实现

作者:张广强 和以 MySQL 为代表的传统事务型数据库相比,数据仓库有一个很大的特点,就是主要面向批量写和查询进行优化,可以不支持更新、事务这些高级特性。一些商用的数据仓库分析系统,例...

小数点
2017/11/27
0
0
beego 如何依赖注入mgo到controller

刚从java投向golang,觉得golang真的很有趣。beego给我感觉就像java的springmvc一样框架,强大! 言归正传,在项目尝试使用beego+mgo的时候不知道应该如何将mgo.session注入到controller。目...

luischan
2016/04/17
540
1
使用Spring AOP实现MySQL数据库读写分离案例分析

一、前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量。 在进行数据库读写分离的时候,我们...

umgsai
2017/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

告警系统主脚本、告警系统配置文件、告警系统监控项目

告警系统主脚本 为方便需要,所有的shell脚本放到 /usr/local/sbin/ 目录下 切换到 /usr/local/sbin/ 目录下,创建告警系统脚本 #!/bin/bash#Written by aming.# 是否发送邮件的开关(1表...

Zhouliang6
4分钟前
1
0
不要再问我跨域的问题了

原文链接:web.jobbole.com 【RTC实时互联网大会 限时免费 马上报名】www.bagevent.com 写下这篇文章后我想,要不以后就把这种基础的常见知识都归到这个“不要再问我XX的问题”,形成一系列内...

阿K1225
6分钟前
0
0
Tomcat配置虚拟路径

<?xml version="1.0" encoding="UTF-8"?> <Context docBase="/data/dispute_https/headPortrait/" path="/headPortrait" reloadable="true"/> <!-- 该文件名为headPortrait.xml,放在${tomca......

Helios51
8分钟前
0
0
开源PaaS Rainbond 3.6.1 Released

本次3.6.1版本更新,重点修复了3.6.0版本部分情况下会出现的BUG,同时改进了内部市场、参数验证、历史消息等功能,详细更新记录如下—— 3.6.1 功能改进 云帮初次使用跳转至注册页面 消息添加...

好雨云帮
8分钟前
0
0
Unsupported major.minor version 52.0

执行代码的jdk版本 低于 编译的jdk版本 其中52.0 对应的就是 jdk1.8版本。

@林文龙
8分钟前
0
0
聊聊spring cloud的AbstractLoadBalancingClient

序 本文主要研究一下spring cloud的AbstractLoadBalancingClient AbstractLoadBalancingClient spring-cloud-netflix-ribbon-2.0.0.RELEASE-sources.jar!/org/springframework/cloud/netfli......

go4it
9分钟前
0
0
博客改版通知

先上博客地址 --> http://metaphors.name 最近将博客从 Jekyll 迁到了 Hexo,所以简书、开源中国、博客园、CSDN文章中的的部分图片丢了,原文链接也不可用了,不过没关系,原文链接都会转到博...

Metaphors
10分钟前
0
0
vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
13分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
16分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
23分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部