首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建可扩展的MongoDB短ids的策略

创建可扩展的MongoDB短ids的策略
EN

Stack Overflow用户
提问于 2013-01-05 16:54:36
回答 3查看 4.5K关注 0票数 3

我想有一个比MongoDB的ObjectID更友好的面向I(如Youtube style: /post/cxB6Ey6)。

我读到,为了可伸缩性,最好让_id作为ObjectID,所以我考虑了两个解决方案:

1)为每个文档添加一个带索引的postid字段

2)创建_id和postid之间的映射集合

在这两种情况下,都使用https://github.com/dylang/shortid之类的东西来生成短id,并在生成时通过查询数据库来确保id是唯一的。(这个查询-生成-插入可以是原子操作吗?)

这些解决方案会对性能产生显著影响吗?

做这件事的最佳策略是什么?

EN

Stack Overflow用户

发布于 2013-01-05 23:52:12

我不认为为_id字段生成ObjectId会直接影响可伸缩性或性能。这是如何发生的呢?

主要区别在于,ObjectIds是由MongoDB创建的,您不必为此承担任何责任。否则,您必须自己确定id的最佳大小,并确保存储在集合中的文档的每个_id字段的值是唯一的。它是必需的,因为_id用作主键。如果您没有非常大的集合,且需要自定义标识符的值,则可以证明这是合理的。

但是使用_id字段有这样的额外好处,它将ObjectId值存储为从时间创建对象id的机会,并在查询中利用这一事实。也可以通过getTimestamp()方法获取ObjectId创建的时间戳。在这种情况下,对_id进行排序相当于按创建时间排序。

但是,如果您打算在URL或HTML语言中使用ObjectId,那么出于安全考虑,您可以对其进行加密。以防止信息泄露和访问对象的创建时间。这可能会带来安全风险。

关于您的解决方案:

1)我认为这是一个非常方便和灵活的解决方案。在这种情况下,您可以在不直接依赖于_idpostId中指定任何值。

但这种解决方案的一个小缺点是,您必须拥有额外的字段并创建额外的索引。而_id是自动索引的。

2)从性能和noSQL方法的哲学角度来看,我认为这不是一个好的解决方案。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14170221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档