Java mongodb中_id的长度有限制吗

Java mongodb中_id的长度有限制吗,java,mongodb,Java,Mongodb,背景:我正在接管一个应用程序(原始工程师即将离开),它充当一些相对较慢的后端服务的缓存层。因为它是RESTful风格的URL,所以每个URL都是唯一的。应用程序使用MongoDb作为缓存的存储,并使用哈希值作为缓存。虽然哈希代码应该是非常唯一的,但它不是唯一的 问题:有人告诉我使用哈希代码(而不是url)的原因是因为MongoDb的_id字段有长度限制,但我找不到任何关于该字段的文档。我在MongoDb文档中只能找到“\u id字段可以是数组以外的任何内容,只要它是唯一的”。MongoDb的_i

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

问题:有人告诉我使用哈希代码(而不是url)的原因是因为MongoDb的_id字段有长度限制,但我找不到任何关于该字段的文档。我在MongoDb文档中只能找到“\u id字段可以是数组以外的任何内容,只要它是唯一的”。MongoDb的_id字段是否有长度限制?如果是,那么限制尺寸是多少


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

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

出于性能方面的原因,您实际上不希望索引字段具有较大的字段值,因为与此类较大值的比较要慢得多。还要记住,每个索引都维护被索引值的副本,因此它需要大量内存。这反过来意味着更频繁地访问磁盘,以便在内存中交换虚拟内存页,这同样会对性能产生负面影响


因此,是的,限制为800字节。

如果使用具有足够长哈希值的好哈希函数,则哈希冲突应该很少。例如,如果您的散列输出128位的值,通常在生成2^64个散列后会发生冲突——因此,如果您每秒生成一百万个散列,则在大约600000年后会发生冲突。这对于大多数目的来说可能已经足够了。

啊,谢谢。是的_id中的长字符串值也很尴尬。真正的解决方案是处理冲突,但这完全是另一回事。从本质上讲,哈希值很难保证是唯一的。因此,我不会将散列存储为_id值(要求是唯一的),也不需要冲突检查。也就是说,为您的REST URI创建缩短的URL应该是完全可能的,这只需要在您的缩短代码中有一些应用程序意识。谢谢您的建议!谢谢。根据这个-限制是1024字节。。。?我想这可能是因为答案是posted@Alex我想是的,我会相应地更新我的答案。谢谢