在数据库中用 UUID 来做ID

预设的 ObjectId 范围太小,改用 UUID 来当数据的唯一 ID

如果你过去有过 Web 开发经验,到这边肯定会开始有一些疑问欲求解,第一个问题肯定是”ObjectId 的数量极限?”。笔者在此不会回答这问题,因为这答案并不重要,想要准确知道答案,可以去”
mongodb.org“寻找答案。

比起上述问题,相信你应该更想问:

预设的 ObjectId 适用的范围?
如果日后数据库要扩展(Scale),是否有其他的 ID 解决方案可使用?

一般情况, MongoDB 预设的 ObjectId 就相当够用了,但如果你是要建构大型的 Web Service 或是保留未来的扩充性,可使用 UUID 去代替 ObjectId。不过,因为 MongoDB 本身并不生成 UUID,若是要使用 UUID,就必需先自行产生好 UUID,然后在新增数据时指定生成好的 UUID 给 _id 字段,让 MongoDB 改用我们给的 ID 而不使用预设生成的 ObjectId。

 

因为要自行产生 UUID,必需先为 NodeJS 安装模块 node-uuid:

npm install uuid

然后生成 UUID 并在 insert 时使用:

var uuid = require('node-uuid');
var mongodb = require('mongodb');

var mongodbServer = new mongodb.Server('localhost', 27017, { auto_reconnect: true, poolSize: 10 });
var db = new mongodb.Db('mydb', mongodbServer);

/* open db */
db.open(function() {
    /* Select 'contact' collection */
    db.collection('contact', function(err, collection) {

        /* Generate UUID(16 Bytes) and convert to BinaryData object for mongodb */
        var uuidBinary = new Buffer(uuid.v1({}, []));
        var id = mongodb.BSONPure.Binary(uuidBinary, mongodb.BSONPure.Binary.SUBTYPE_UUID);

        /* Insert a data with uuid */
        collection.insert({
            _id: id,
            name: 'Fred Chien',
            email: 'cfsghost@gmail.com'
        }, function(err, data) {
            if (data) {
                console.log('Successfully Insert');
            } else {
                console.log('Failed to Insert');
            }
        });
    });
});

你可能会发现,在上面的范例程序中,我们将 UUID 转成 MongoDB BSON 的 BinaryData 格式,这是为了效能考虑,因为用纯字符串当做 Unique ID,在数据库搜寻上会比 BinaryData Object 慢很多。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值