1

我是 MongoDB 的新手。我使用 MongoDB 作为数据库创建了一个 Java 应用程序。我在一个副本集中配置了 3 台服务器。我的伪代码:{

createUser getUser updateUser

}

这里 createUser 成功创建了用户,但 getUser 有时无法返回该用户。

当我分析它是由于数据复制延迟。

我该如何克服这个问题?

无论如何在创建数据时立即复制数据吗?

有没有其他方法可以让用户成功?

提前谢谢!

4

3 回答 3

0

The slaveOk property is now known as ReadPreference (.SECONDARY in this case) in newer Mongo Java driver versions. This can be set at the Mongo/DB/Collection level. Note that when you set ReadPreference at these levels, it applies for all callers (i.e. these objects are shared across threads).

Another approach is to try the ReadPreference.SECONDARY and if it fails, try without it and go to the master. This logic can be isolated to your repository layer, so the service layer doesn't have to deal with it. If you are doing this, you may want to set the ReadPreference at the DBQuery object, which is on a per-use basis.

于 2012-08-24T05:59:43.790 回答
0

如果您确定问题是由于复制延迟引起的,您可以做的一件事是确保您的写入是安全的并使用该w标志。这样,MongoDB 将等到数据至少复制到n节点后才返回。您也可以从客户端驱动程序执行此操作。

MongoDB getLastError

你在读书slaveOk=True吗?如果您从 ReplicaSet Primary 读取,这也不应该是一个问题。

于 2012-06-13T18:55:22.180 回答
0

我不熟悉 Java 驱动程序,但有wj选项。

w选项确认写入操作已复制到指定数量的副本集成员,包括主副本。

j只有在将操作写入日志后才会确认写入操作。

看起来您需要使用WriteConcern

于 2013-03-02T22:30:58.540 回答