golang服务与mongodb交互,以及驱动mgo源码浅析

公司大数据部门有一个需求,要将所有的交易数据进行落地,以便进行分析和价格预测等等。

具体场景:
1,写多读少
2,数据量庞大,并且每天日益增长

为什么选mongodb:
1,mongodb是弱数据结构模式,每个文档之间的结构互不影响,日后如果需要增加字段直接增加即可,对集合不会产生任何影响。
2,分布式,面对庞大的数据量,mongo原生支持sharding存储。
3,无事务和join的查询需求

下面使用go来和mongodb进行交互:
mongo serer是3.6版本,安装过程略过。
go的mongo驱动用的是”https://github.com/go-mgo/mgo

.
.
.

var globalSession = new(mgo.Session)

func MongoInit() error {
    var err error
    var url string

    mongoConfig := config.GetConfig().MongoDb
    url = "mongodb://" + mongoConfig.UserName + ":" + mongoConfig.Password + "@" +
        mongoConfig.IP + ":" + mongoConfig.Port + "/" + mongoConfig.DbName

    globalSession, err = mgo.Dial(url)
    if err != nil {
        logger.Error("mongo init error", err)
    }

    globalSession.SetMode(mgo.Strong, true)

    return err
}

初始化mongo连接,同时设置模式为”Strong”。

Strong 一致性模式

session 的读写操作总向 primary 服务器发起并使用一个唯一的连接,因此所有的读写操作完全的一致(不存在乱序或者获取到旧数据的问题)。

Monotonic 一致性模式

session 的读操作开始是向某个 secondary 服务器发起(且通过一个唯一的连接),只要出现了一次写操作,session 的连接就会切换至 primary 服务器。由此可见此模式下,能够分散一些读操作到 secondary 服务器,但是读操作不一定能够获得最新的数据。

Eventual 一致性模式

session 的读操作会向任意的 secondary 服务器发起,多次读操作并不一定使用相同的连接,也就是读操作不一定有序。session 的写操作总
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值