gpt4 book ai didi

mongodb - 如何在 Mongo 中为每个分片定义分片范围?

转载 作者:IT老高 更新时间:2023-10-28 13:21:03 25 4
gpt4 key购买 nike

比方说,文件是

{
x:Number
}

我有 3 个碎片。

不是自动分片,我可以具体定义shard1只包含数据x<0,shard2只包含数据0 =< x =< 1000,shard 3是1000

最佳答案

你可以。可以手动预分割 block ,如下所述:http://www.mongodb.org/display/DOCS/Splitting+Chunks

仔细考虑如何拆分数据 block 。如果你做得不好,你可能会遇到很多性能问题,但如果你对你的 key 有足够的了解,你会收获很多。

如果你这样做了,你可能想关闭平衡器:

> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);

(此处描述为:http://www.mongodb.org/display/DOCS/Sharding+Administration)

这是您可以如何做的一个例子。根据您想要做什么,您将不得不对其进行修改(例如,我假设您的分片键未命名为 x,并且您的范围不是 -1000 到 2000)。

> use admin
> db.runCommand({split: "my_db.my_coll", middle: {x: 0}})
> db.runCommand({split: "my_db.my_coll", middle: {x: 1000}})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: -1}, to: "shard_1_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 0}, to: "shard_2_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 1000}, to: "shard_3_name"})

split 命令创建 block 。每个命令将包含中间值的 block 分成两部分,因此第一个将包含 min_value -> max_value 的 block 分成 min_value -> 00 -> max_value 。然后第二个命令将包含 1000 的 block ,即前一个命令创建的第二个 block ,拆分为两个新 block 。在该命令之后,您有三个 block :

  • min_value -> 0
  • 0 -> 1000
  • 1000 -> 最大值

以下三个命令将这些 block 移动到单独的分片中。文档说该命令将移动包含 find 中的值的 block ,所以我选择了三个我知道位于不同 block 中的值并使用了这些值(BSON 中有一个符号表示 min_keymax_key,但我不确定如何在这种情况下正确使用它)。

也阅读此页面http://www.mongodb.org/display/DOCS/Moving+Chunks

关于mongodb - 如何在 Mongo 中为每个分片定义分片范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com