【问题标题】:Effect mongodb _id generation on Indexing对索引的影响 mongodb _id 生成
【发布时间】:2011-01-04 07:20:22
【问题描述】:

我正在使用 MonoDB 作为数据库.......

我将为每个文档生成一个 _id 我为该用户使用 useId 和 FolderID

这里的userId对于每个用户来说都是不同的,每个用户也有不同的FolderIds

我生成_id为

userId="user1"
folderId="Folder1"

_id = userId+folderId

这个 id 生成对 mongoDB 索引有什么影响... 它会像 MongoDB 生成的 _id 一样快速工作吗?

【问题讨论】:

    标签: indexing mongodb


    【解决方案1】:

    更好的解决方案是将 _id 列保持原样,并在您的文档中使用单独的 userIdfolderId 字段,或者将它们合并创建一个单独的字段。

    至于它是否会“一样快”...取决于您的查询,但是对于例如按文档的“创建”日期排序,您将无法简单地按 _id 你也会失去sharding and distribution 的好处。

    但是,如果您想将这两个 ID 都用于您的 _id,还有另一种选择...

    您实际上可以使用 both 但将它们 分开 ...例如这是一个有效的 _id

    > var doc = { "_id" : { "userID" : 12345, "folderID" : 5152 }, 
                  "field1" : "test", "field2" : "foo" };
    > db.crazy.save(doc);
    > db.crazy.findOne();
    {
            "_id" : {
                    "userID" : 12345,
                    "folderID" : 5152
            },
            "field1" : "test",
            "field2" : "foo"
    }
    > 
    

    【讨论】:

    • 您应该确保键的顺序始终相同,否则_id 将不同。 {"userID" : 12345, "folderID" : 5152} 与 bson 中的 {"folderID" : 5152, "userID" : 12345} 不同。
    【解决方案2】:

    应该没问题 - 一个可预见的问题是您将失去从 MongoID 中反转日期/时间戳的能力。为什么不在文档中添加另一个 ID 对象?你只丢失了几个字节,而且你没有搞砸内置的索引系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2021-11-13
      • 2014-08-20
      • 2015-09-12
      相关资源
      最近更新 更多