公司大数据部门有一个需求,要将所有的交易数据进行落地,以便进行分析和价格预测等等。
具体场景:
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 的写操作总