对于每秒调用约100次的操作,我需要一些持久性整数Id。我在Settings集合中有一个文档,其中id存储在lastId字段中。

根据mongodb doc我想使用findAnyModify()参数的update: { $inc: { lastId: 1 } }操作来实现它。我可以依靠每个下一个电话返回一个新的(递增的)号码吗?

还是使用java AtomicLong计数器作为一种更好的解决方法?它会在开始时从mongo读取lastId,并且每增加一次,我就会从mongo中写入(但不读取)?

最佳答案

如果您需要mongodb中的持久化序列,则确实需要使用运算符$inc,以便在服务器端原子地递增将用作计数器的给定字段。

如果使用AtomicLong,则几乎无法保证序列的一致性(尤其是在集群环境中),从而可能会遇到以下情况:对多个文档使用相同的ID。

10-05 19:39