mongodb中_id的长度是否有限制

时间:2012-04-19 08:15:54

标签: java mongodb

背景:已经接管一个应用程序(原始工程师正在离开),它充当了一些相对较慢的后端服务的缓存层。因为它是RESTful样式的URL,所以每个URL都是唯一的。该应用程序使用MongoDb作为缓存的存储,并使用哈希值作为缓存。虽然哈希码应该是非常独特的,但它并不是唯一的。

问题:我被告知使用哈希码(而不是网址)的原因是因为MongoDb的_id字段有长度限制,但我找不到任何文件。我在MongoDb文档中找到的只是“_id字段可以是除数组之外的任何内容,只要它是唯一的”。 MongoDb的_id字段是否有长度限制?如果是这样,限制尺寸是多少?

该应用程序是用Java编写的。哦,我是MongoDb的新手。

2 个答案:

答案 0 :(得分:12)

要编制索引的字段的长度有限制,即1024字节。这是对索引条目大小的限制,而不是文档字段大小,限制在~16MB(完整文档的最大大小)。

出于性能原因,您并不真正需要索引字段的大字段值,因为与这些大值的比较要慢得多。还要记住,每个索引都会维护被索引的值的副本,因此需要大量内存。这反过来意味着更频繁的磁盘访问以交换虚拟内存页面进出内存,这再次对性能产生负面影响。

是的,限于800字节。

答案 1 :(得分:4)

如果您使用具有足够长哈希值的良好哈希函数,则应该很少发生哈希冲突。例如,如果你的哈希输出一个128位的值,你通常会在产生2 ^ 64个哈希值后发生碰撞 - 所以如果你每秒产生一百万个哈希值,你就会在大约60万年后发生碰撞。对于大多数用途来说,这可能已经足够了。