在群集环境中生成范围(0-100k)内的随机数

时间:2013-02-18 00:01:13

标签: java mongodb random parallel-processing cluster-computing

我必须在群集环境中生成一个范围(0-100.000)内的随机数(许多无状态的基于Java的应用服务器+ Mongodb) - 因此每个用户请求都会得到一些唯一的数字,并在接下来的几个请求中保留它

据我了解,我有两种选择: 1.有一些数字坚持在mongo和incrementAndGet它 - 但它不是原子 - 不好的选择。 2.使用Redis - 它的原子和支持计数器。 3.有什么想法吗?使用UUID并为其设置范围是否安全? 4. Hazelcast?

还有其他吗?

由于

1 个答案:

答案 0 :(得分:2)

我会利用现有的MongoDB基础架构,并使用MongoDB findAndModify命令进行原子增量并获取操作。

对于shell,命令看起来像。

var result = db.ids.findAndModify( {
                           query: { _id: "counter" },
                           sort: { rating: 1 },
                           new : true,
                           update: { $inc: { counter: 1 } },
                           upsert : true
                         } );

'new:true'在更新后返回文档。如果文档丢失,Upsert会创建文档。

10gen supported driverAsynchronous Driver都包含查找和修改命令的帮助方法/构建器。