为Couchbase生成唯一的UInt32 ID
我正在寻找一种方法来为nosql数据库生成一个唯一的ID。 与关系型数据库不同的是,没有关于行的想法,这意味着没有最后一行要增加。
处理这个最常见的方法是使用UUID 。 但我的问题是我需要添加另一个ID( UUID除外)需要:
- 独特
- 未签名的Int32
总数据可能达到50,000,000
左右。 那么如何生成一些 独特的 uint32 ID?
UInt32值types表示值为0到4,294,967,295的无符号整数。
- 仅在新用户注册时生成。
- 给每个新用户3个ID。
- 目前正在使用Couchbase服务器 。
这个问题已经解决了 – 我会build议在Couchbase中使用primefacesIncrement(或Decrement)函数 – 这是生成唯一ID的常用模式。
每当调用incr()
方法时,它会以指定的值自动递增计数器,并返回旧值,因此如果两个客户端同时尝试递增,则是安全的。
伪代码示例(我不是Node.JS专家!):
// Once, at the beginning of time we init the counter: client.set("user::count", 0); ... // Then, whenever a new user is needed: nextID = client.incr("user::count", 1); // increments counter and returns 'old' value. newKey = "user_" + nextID; client.add(newKey, value);
有关完整的用法示例,请参阅Node.JS SDK以供参考,请参阅Couchbase开发人员指南中的使用参考教程查找部分。
这是一个函数,每次调用时都会返回一个唯一的标识符。 只要项数不超过32位整数的范围就应该没有问题,这似乎就是上述要求的情况。 ( 警告:一旦UID数组填满,这将进入一个无限循环,您可能还需要创build某种可以清空数组的重置函数,从而在必要时重置UID。
var getUID = (function() { var UIDs = []; return function() { var uid; do { uid = Math.random() * Math.pow(2, 32) | 0x0; } while (UIDs[uid] !== undefined); return UIDs[uid] = uid; }; }());
- Couchbase node.js模块
- MongoDB / Strongloop / Loopback – 带无线networking的设备之间的脱机同步无线连接
- couchbase服务器+ couchbase lite + couchbase syncgetway + nodejs + raspbarry pi
- 如何通过cbq在Couchbase服务器上创build一个使用密码authentication的桶的索引?
- 包装couchbase acccessfunction
- 如果db调用抛出一个错误,我该如何返回错误标题?
- Ubuntu服务器12.04上的Node couchbase模块会抛出“无效的ELF头”错误
- 不能使用“mutateIn”与couchbase节点sdk
- Couchbase&nodejs:使用范围,顺序和有限的结果查看查询