mongodb中数据库连接类mongoClient与mongo在写策略上的区别

Mongo和MongoClient 两者的关系

1、Mongo和MongoClient类均在mongodb驱动中定义的,因此两者都可以作为数据库连接类。

2、  MongoClient作为官方的默认连接类,其继承了mongo

3、mongo与 mongoClient相比,在写性能上较快,读性能上两者相差不大,这个的主要原因在于,两者的写策略不同

MongoClient 写策略的源码解读

MongoClient 的默认构造函数

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

带参数的构造函数,执行如下:

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

在build 方法中 ,创建了mongoClientOption

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

mongoClientOption 的writeConcern 为写策略

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

该写策略默认 为acknowledged, 也就是需要写入确认信息

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

从其注释信息,可以看出这个写策略的解释

mongodb中数据库连接类mongoClient与mongo在写策略上的区别


Mongo 写策略的源码解读

默认的构造函数为

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

查看creategacyOptions静态方法  

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

在MongoClientOptions类的 legacyDefaults()方法中,设置了写策略为

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

UNACKNOWLEDGED 策略的意思

mongodb中数据库连接类mongoClient与mongo在写策略上的区别


通过源码解读,发现两者 作为mongodb 数据库连接类,在写策略上是存在不同的,这两种写策略的不同,决定了mongo比mongoClient 的写入要快的多,但是官方已经不建议使用mongo了,那么怎么使用mongoClient 来到达快速写入的目的呢!mongoClient 提供了修改写策略的方法,如下:

mongodb中数据库连接类mongoClient与mongo在写策略上的区别

,这样就能实现不需要写入返回信息的场景,快速到达写操作。


总结:

本文从源码解读了mongo 和mongoClient 在写策略上的差别,并对mongoClient 进行修策略的修改进行了演示,最重要的就是这两种写策略在什么场景下使用,UNACKNOWLEDGED 在不需要插入返回信息的情况,比如,不需要关心操作是否成功,总共写了多少条数据,ACKNOWLEDGED 写策略则会返回一个WriteResult 对象,保存插入的返回信息。