【问题标题】:Is there a limit on the length of _id in mongodbmongodb中_id的长度有限制吗
【发布时间】:2014-05-01 20:34:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

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

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

    是的,限制为 800 字节。

    【讨论】:

    • 啊,谢谢。 _id 中的长字符串值也很尴尬。真正的解决方案是处理碰撞,但那是另一回事了。
    • 从本质上讲,哈希值很少能保证是唯一的。因此,我不会将哈希值存储为 _id 值(必须是唯一的),并且不需要进行冲突检查。也就是说,为您的 REST URI 创建缩短的 url 应该是完全可能的,它只需要在您的缩短代码中具备一些应用程序意识。
    • 感谢您的建议!欣赏它。
    • 据此 - docs.mongodb.org/manual/reference/limits 限制为 1024 字节...?我想这可能在发布答案后有所增加
    • @Alex 我认为它有,我会相应地更新我的答案。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2010-12-02
      • 2012-01-10
      • 2012-07-25
      相关资源
      最近更新 更多