使用MongoDB + NodeJS的16个字符唯一ID

时间:2017-10-08 15:50:29

标签: node.js mongodb uuid

我正在寻找一种在base 64中创建长度为16个字符的UUID的有效方法。每个ID都必须是随机的,因此您无法预测其他ID。

此外,我不确定如何检查碰撞是否发生,我怎么能以有效的方式寻找它们。我使用的是mongoDB和服务器Node JS。

一个例子: 我调用该函数来创建1.000.000密钥,并且在数据库中已经保存了数百万个密钥。如果不将每个密钥与数据库中现有密钥进行比较,我怎样才能保证每个密钥只存在?

我希望有人可以帮助我。谢谢:))

1 个答案:

答案 0 :(得分:0)

至于生成这样的ID,我们知道Base64编码大约是原始二进制的1/3,我们可以简单地生成12个字节的随机性,然后编码:

const crypto = require('crypto');

function generateRandomID() {
    return new Promise((res) => {
        crypto.randomBytes(12, (err, buf) => {
            if(err) throw err;
            const enc = buf.toString('base64');
            if(enc.length !== 16) throw 'invalid';
            res(enc);
        });
    });
}

generateRandomID()
    .then((id) => console.log(id))
    .catch((err) => console.log(err));

我没有MongoDB专家,但我确信它有独特的索引,因此您只需尝试添加一个与以前存在的ID相同的文档,并且&#&# 39; d失败。