【问题标题】:Mongo - Compound Shard Indexes in 2.2Mongo - 2.2 中的复合分片索引
【发布时间】:2012-08-16 03:23:20
【问题描述】:

我正在阅读 2.2 的 Mongo Shard 密钥的文档,发现它有点混乱。

所有分片集合必须有一个以分片开头的索引 键。 如果您对尚未包含文档的集合进行分片,并且 如果没有这样的索引,shardCollection 将在 分片键。如果集合已包含文档,则必须 在使用 shardCollection 之前创建一个适当的索引。

2.2 版更改:shard key 上的索引不再需要 与分片键相同。该索引可以是分片的索引 像以前一样键本身,或一个复合索引,其中分片键是 索引的前缀。此索引不能是多键索引。

如果你有一个名为 people 的集合,使用字段 { zipcode: 1 },并且您想用字段上的索引替换它 { 邮编:1,用户名:1​​ },然后:

在 { zipcode: 1, username: 1 } 上创建索引:db.people.ensureIndex( { 邮编:1,用户名:1​​ } );当 MongoDB 完成构建 索引,您可以安全地删除 { zipcode: 1 } 上的现有索引: db.people.dropIndex({ 邮编:1 }); 警告分片上的索引 key 不能是多键索引。 如上,{ zipcode: 1 上的索引, username: 1 } 只能替换 zipcode 上的索引,如果没有 用户名字段的数组值。

如果您删除了分片键的最后一个适当索引,请通过以下方式恢复 仅在分片键上重新创建索引。

我有几个关于分片键和索引的问题。

i) 从文档来看,2.2 之前似乎支持多键索引。如果是这种情况,复合索引与多键索引有何不同?

ii) 和有什么区别 [a] 以分片键开头的索引和 [b] 以分片键为前缀的索引?

iii) 关于分片键上的索引不应该是多键索引的警告说明是什么? db.people.ensureIndex( { zipcode: 1, username: 1 } 不是多键索引吗?

【问题讨论】:

    标签: mongodb indexing sharding mongodb-indexes


    【解决方案1】:

    我注意到关于索引的 MongoDB 文档可能会造成混淆。多键索引是一种为数组中的每个元素创建单独索引条目的方法:http://www.mongodb.org/display/DOCS/Multikeys。另一方面,复合索引在两个或多个字段上创建索引条目:http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeys

    1. 以前版本的 MongoDB 不支持多键分片键索引。由于 MongoDB 根据 shard key 值的范围拆分 sharded 集合,因此无法使用多键索引。

    2. 假设我理解您的问题,没有区别。分片键索引可以是单个字段的索引,也可以是以分片键开头的复合索引。

    3. 这是一个复合索引的示例,可用于分片键索引。


    如果 zipcode 是分片键,这些索引将起作用:

    db.people.ensureIndex({ zipcode: 1}) 
    
    db.people.ensureIndex({ zipcode: 1, username: 1 }) 
    

    多键索引示例:

    {_id: 1, array: [{zipcode: x}, {username: y}]}
    
    db.people.ensureIndex({array: 1}) 
    

    【讨论】:

      【解决方案2】:

      复合索引与多键索引有何不同?:

      复合索引是您在示例中描述的索引:

      { zipcode: 1, username: 1 }

      多键索引是对数组中的项目进行索引的索引,例如tags 上的索引,用于返回包含标签“mongoDB”的所有文档,

      [a] 以分片键开头的索引和 [b] 以分片键为前缀的索引有什么区别?:

      什么都没有。

      关于分片键上的索引不应该是多键索引的警告说明是什么?:

      当您考虑到多键索引是数组上的索引时,这很有意义。考虑我们在标签数组上的索引。如果一个文档在数组中有正确的值集合,它可以很容易地存在于许多(或所有)分片中。

      换句话说,文档仍然必须基于单个值进行分片,而不是对象或数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多