对于每秒调用约100次的操作,我需要一些持久性整数Id。我在Settings集合中有一个文档,其中id存储在lastId字段中。
根据mongodb doc我想使用findAnyModify()
参数的update: { $inc: { lastId: 1 } }
操作来实现它。我可以依靠每个下一个电话返回一个新的(递增的)号码吗?
还是使用java AtomicLong
计数器作为一种更好的解决方法?它会在开始时从mongo读取lastId
,并且每增加一次,我就会从mongo中写入(但不读取)?
最佳答案
如果您需要mongodb中的持久化序列,则确实需要使用运算符$inc
,以便在服务器端原子地递增将用作计数器的给定字段。
如果使用AtomicLong
,则几乎无法保证序列的一致性(尤其是在集群环境中),从而可能会遇到以下情况:对多个文档使用相同的ID。