对于每秒调用约100次的操作,我需要一些持久性整数Id。我在Settings集合中有一个文档,其中id存储在lastId字段中。
根据mongodb doc我想使用带有findAnyModify()
参数的update: { $inc: { lastId: 1 } }
操作来实现它。我可以依赖每个下一个调用返回一个新的(递增的)数字吗?
或者使用java AtomicLong
计数器作为解决方法更好吗?它将在开始时从mongo读取lastId
,并且每次增量我将从mongo写入(但不读取)?
答案 0 :(得分:1)
如果你需要mongodb中的持久化序列,你确实需要使用运算符$inc
,以便在服务器端以原子方式递增你将用作计数器的给定字段。
如果您使用AtomicLong
,则几乎无法保证序列的一致性(特别是在群集环境中),这样您可能会面临多个文档最终使用相同ID的情况。 / p>