我想有一个比MongoDB的ObjectID更友好的面向I(如Youtube style: /post/cxB6Ey6)。
我读到,为了可伸缩性,最好让_id作为ObjectID,所以我考虑了两个解决方案:
1)为每个文档添加一个带索引的postid字段
2)创建_id和postid之间的映射集合
在这两种情况下,都使用https://github.com/dylang/shortid之类的东西来生成短id,并在生成时通过查询数据库来确保id是唯一的。(这个查询-生成-插入可以是原子操作吗?)
这些解决方案会对性能产生显著影响吗?
做这件事的最佳策略是什么?
发布于 2013-01-05 23:52:12
我不认为为_id字段生成ObjectId会直接影响可伸缩性或性能。这是如何发生的呢?
主要区别在于,ObjectIds是由MongoDB创建的,您不必为此承担任何责任。否则,您必须自己确定id的最佳大小,并确保存储在集合中的文档的每个_id字段的值是唯一的。它是必需的,因为_id用作主键。如果您没有非常大的集合,且需要自定义标识符的值,则可以证明这是合理的。
但是使用_id字段有这样的额外好处,它将ObjectId值存储为从时间创建对象id的机会,并在查询中利用这一事实。也可以通过getTimestamp()方法获取ObjectId创建的时间戳。在这种情况下,对_id进行排序相当于按创建时间排序。
但是,如果您打算在URL或HTML语言中使用ObjectId,那么出于安全考虑,您可以对其进行加密。以防止信息泄露和访问对象的创建时间。这可能会带来安全风险。
关于您的解决方案:
1)我认为这是一个非常方便和灵活的解决方案。在这种情况下,您可以在不直接依赖于_id的postId中指定任何值。
但这种解决方案的一个小缺点是,您必须拥有额外的字段并创建额外的索引。而_id是自动索引的。
2)从性能和noSQL方法的哲学角度来看,我认为这不是一个好的解决方案。
https://stackoverflow.com/questions/14170221
复制相似问题