【问题标题】:understanding MongoDB chunk split了解 MongoDB 块拆分
【发布时间】:2018-07-24 21:35:56
【问题描述】:

我是 MongoDB 新手,正在阅读手册。我已经理解了 shard 和 chunk 是什么(其他分布式系统也有类似的概念),但我很难理解这两行:

块可以表示的最小范围是单个唯一的分片键值。不能拆分仅包含具有单个 shard key 值的文档的块。

这是文档的链接:data partitioning。鉴于文档提供的 minKey = 0 和 maxKey = 200 的示例,谁能给我一个可以拆分的块和一个不能拆分的块的示例?尤其是不可拆分的块内的文档是什么样的?我认为如果 x 是分片键并且相对于范围 175-200 的块是最小的,因此不可分割,则 x=180 的文档将插入该不可分割的块中。我错了?其他类型的密钥会怎样?

【问题讨论】:

    标签: mongodb sharding chunks


    【解决方案1】:

    假设您有一组已分片的推文。为简单起见,我将使用“account_id”作为分片键(例如您的问题中的x)。请注意,对于这个用例来说,这是一个错误的分片键,原因我们很快就会看到。

    集合是分片的,accounts_id 的范围被分解成块,这些块将分布在各个分片中。一大块将引用 175-200 的 account_ids。

    一段时间后,这些帐户中的每一个都继续发推文,并且该块的大小增长到分成两个块的程度:[175, 183][184,200]

    更进一步,假设在这个范围内有一个非常多产的用户(比如说account_id: 180)不停地发推文。最终,块拆分将发生到该帐户本身位于一个块中的程度,例如[180,180]。随着越来越多的推文添加到集合中,该块的大小将继续增长,但由于分片键处于其最细粒度,即单个 account_id,因此无法拆分该块。这个chunk对应的文档可能很多,但是只对account_id进行过滤是没有办法拆分这个chunk的。

    这种特殊情况就是为什么这可能是一个不可取的分片键。

    相比之下,假设集合是基于tweet_id 分片的。该值理论上是唯一的,因此单个值不会将块的大小增长到无法拆分的位置。

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 1970-01-01
      • 2015-08-02
      • 2019-10-24
      • 2020-12-14
      • 2020-02-08
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多