为Couchbase生成唯一的UInt32 ID

我正在寻找一种方法来为nosql数据库生成一个唯一的ID。 与关系型数据库不同的是,没有关于行的想法,这意味着没有最后一行要增加。

处理这个最常见的方法是使用UUID 。 但我的问题是我需要添加另一个ID( UUID除外)需要:

  • 独特
  • 未签名的Int32

总数据可能达到50,000,000左右。 那么如何生成一些 独特的 uint32 ID?

UInt32值types表示值为0到4,294,967,295的无符号整数。

  • 仅在新用户注册时生成。
  • 给每个新用户3个ID。
  • 目前正在使用Couchbase服务器

       

网上收集的解决方案 "为Couchbase生成唯一的UInt32 ID"

这个问题已经解决了 – 我会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; }; }());