[英]Read own writes in a MongoDB replicaset. Casual consistency not working?
我在 3 成員副本集中使用 mongodb,試圖讀取我自己的寫入。 然而,我似乎從我的閱讀中得到了陳舊的數據。 根據文檔,通過“多數”問題進行讀/寫,它應該保證:
“讀操作反映了它們之前的寫操作的結果。”
2018年的這篇文章中也有同樣的說明:
具有讀取關注多數的因果讀取 R1 等待看到 T1 多數已提交,然后返回成功。
然而,我似乎沒有這么幸運。 下面的代碼插入一個用戶,並立即嘗試通過 ID 找到同一用戶。 這是在一個循環中完成的,只需要 1-3 次迭代,它就會因“找不到用戶”而失敗。
IMongoCollection<User> collection = MongoDatabase.GetCollection<User>("UserCollection")
.WithReadConcern(ReadConcern.Majority)
.WithWriteConcern(WriteConcern.WMajority)
.WithReadPreference(ReadPreference.Secondary);
Random rnd = new Random();
while (true)
{
User newUser = new User
{
Email = $"{rnd.Next(int.MinValue, int.MaxValue)}@gg.com"
};
collection.InsertOne(newUser);
if (newUser.Id == ObjectId.Empty)
{
throw new Exception("Id is empty");
}
var findFluent = collection.Find(Builders<User>.Filter.Eq(x => x.Id, newUser.Id));
User foundUser = findFluent.FirstOrDefault();
if (foundUser == null)
{
throw new Exception("User not found");
}
}
我已經為讀/寫指定了“多數”問題。 為了測試,我將“次要”指定為閱讀偏好。 如果我將“Primary”指定為讀取首選項,這將永遠不會失敗(顯然)。
我究竟做錯了什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.