与Mongo 4.2.1和Go驱动程序1.1.2的因果一致性

时间:2019-11-04 12:44:04

标签: mongodb go

我看到Mongo 4.2.1和Go驱动程序1.1.2违反了“阅读您所写内容”的规定

这是在我的开发机器(Ubuntu)上,没有集群,只有一个数据库,而且非常小(如果有的话,有数百个文档)。

它具有足够的内存(32 GB)和快速磁盘(NVME)。文件系统是ext4(我知道XFS在性能上是首选,但是这里几乎没有负载)。

发生的事情是:一个GO协程发布了一个小文档的更新,将整数(数字)设置为一个新值。

大约一秒钟后,另一个线程进行了读取,而看不到写入。有时。

几秒钟后重复读取将正确地读回新值。

两个线程(GO协程)都使用相同的Mongo连接。

我尝试配置如下所示的读写问题,尽管据我了解,“多数”是两者的默认设置。它没有帮助。

readConcern := readconcern.Majority()

writeConcern := &writeconcern.WriteConcern{}
writeConcern = writeConcern.WithOptions(
   writeconcern.WMajority())

mongoConn, mongoErr := mongo.Connect(mongoCtx, &options.ClientOptions{
   Hosts:        []string{"localhost"},
   ReadConcern:  readConcern,
   WriteConcern: writeConcern})

通过阅读文档*,我不清楚是否应该为Mongo 3.6或更高版本自动启用临时一致性,或者是否需要由应用程序或驱动程序启用。

如果是后者,如何与官方GO驱动程序保持随意一致性?

[*] https://docs.mongodb.com/manual/core/read-isolation-consistency-recency/#sessions

0 个答案:

没有答案