Mongodb 与Mongo 4.2.1和Go driver 1.1.2的因果一致性

Mongodb 与Mongo 4.2.1和Go driver 1.1.2的因果一致性,mongodb,go,Mongodb,Go,我看到Mongo 4.2.1和Go driver 1.1.2违反了“阅读你写的内容” 这是在我的开发机器(Ubuntu)上,没有集群,只有一个数据库,而且非常小(如果有的话,有数百个文档) 它有大量内存(32GB)和一个快速磁盘(NVME)。文件系统是ext4(我知道XFS是性能方面的首选,但这里几乎没有任何负载) 发生的情况是:OneGo协同程序发布一个小文档的更新,将一个整数(数字)设置为一个新值 大约一秒钟后,另一个线程执行读操作,但看不到写操作。有时候 几秒钟后重复读取将正确读回新值 两

我看到Mongo 4.2.1和Go driver 1.1.2违反了“阅读你写的内容”

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

它有大量内存(32GB)和一个快速磁盘(NVME)。文件系统是ext4(我知道XFS是性能方面的首选,但这里几乎没有任何负载)

发生的情况是:OneGo协同程序发布一个小文档的更新,将一个整数(数字)设置为一个新值

大约一秒钟后,另一个线程执行读操作,但看不到写操作。有时候

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

两个线程(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驱动程序的随意一致性


[*]

您能创建一个mcve吗?客户端会话和写问题与独立数据库的用例无关。在尝试读取之前,如果能看到确认您正在等待写入操作完成的代码就太好了。Alex,我在更新端的代码如下:res,err:=collection.UpdateOne(context.Background(),bson.M{“\u id”:folder.id},bson.M{“$set”:values,},)Alex,Re:“在尝试读取之前确认您正在等待写入操作完成”抱歉,我该怎么做?我认为偶然的一致性意味着Mongo将保证“在写入之后发生”的读取将自动看到写入的效果?这种假设是否错误?这是对的,但前提是您保证“在写入之后发生”的读取”他写道。这就是为什么我问你如何同步你的美食。蒙哥对他们一无所知。您的工作是确保在写入请求之后将读取请求发送到db。然后db将保证其自身的一致性——读操作将看到写操作的结果。因果一致性要求使用显式会话。请看