为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; }; }());
- Node.js -Couchbase – 警告:我们遇到麻烦与索引器进程通信。 信息可能是陈旧的
- 如果db调用抛出一个错误,我该如何返回错误标题?
- couchbase集群和nodejs分布式架构
- 并行数据库请求从Node.js SDK到Couchbase
- 使用cbdocloader将JSON文件导入到Couchbase
- CouchbaseError:在套接字上收到的数据不是预期的格式 – couchbase?
- Couchbase – 在ttl过期如何保存另一台服务器或couchbase实例上的文档?
- Couchbase&nodejs:使用范围,顺序和有限的结果查看查询
- Port Cordova插件(数据库API)到Node.Js模块?