MongoDB 分片方法

2025年3月17日 | 阅读 3 分钟

#1. sh.addShard(<url>)

在任何分片集群中,我们可以使用此方法添加分片副本集。 add shard 方法始终在 mongos 实例上运行。

示例

必须指定副本集和主机名。 如果为副本集的任何一个成员指定其他主机名,那么如果指定任何其他主机名,所有主机名都必须与同一副本集相关。

下面的示例添加了一个名为 replJTP 的副本集,并指定了副本集的一个成员

#2. sh.addShardTag(shard, tag)

此方法用于返回到 sh.addShardToZone() 并为每个分片分配一个分片 ID。 指定的功能仍然适用于 MongoDB 3.2。 但是在 MongoDB 3.4 中,它提供了区域分片作为标签感知分片的子分片。

示例

以下示例向三个分片添加三个标签,JavaMongoDBPython

#3. sh.enableSharding(database, primaryShard)

正如该方法的名称所示,它用于为参数中指定的数据库启用分片。 当我们为任何数据库启用分片时,我们可以使用 sh.shardCollection() 方法来对指定数据库的集合进行分片。 此方法包装 enableSharding 命令。

语法

示例

以下示例为从 mongos 运行的 JTP 数据库启用分片

#4. sh.startBalancer(timeout, interval)

此方法用于分片集群,以在指定的时间和间隔启动平衡器。 可以使用此方法为分片集群启用自动拆分选项。 此方法也是 balencerStart 命令的包装器。 也就是说,要启动平衡,该方法不会等待。

#5. sh.stopBalancer(timeout, interval)

stop balance 方法用于禁用分片集群中运行的平衡器。 可以使用此方法删除指定分片集群的自动拆分。 如果在 mongod 实例上运行 sh.stopBalancer() 方法会返回错误,并且我们只能在 mongos 实例上运行它。

#6. convertShardKeyToHashed(<Object>)

该方法返回参数中指定的输入对象的哈希值。 该方法将指定的 shard key 转换为哈希方法,该方法使用与哈希索引使用的相似的哈希函数。 此外,对于参数中的特定键,该方法可用于查看哈希值是多少。

示例

考虑一个使用哈希分片键 [1] 的分片集合

如果集合中存在以下文档,则 _id 字段的哈希值用于分发文档

#7. sh.updateZoneKeyRange(namespace, minimum, maximum, zone)

将一系列分片键值与一个区域关联。 该方法的助手 sh.updateZoneKeyRange() 和 sh.addTagRange() 可以在数据库命令和未分片的集合上运行此方法。 具有较低和较高边界重叠的一系列分片键值不能借助分片集合的现有范围来创建。

让我们举个例子,我们有一个 10 到 20 键值的现有范围。我们无法创建一个新的 15 到 30 范围,因为新范围会与现有范围重叠。

示例

在下面的示例查询中,我们有一个分片集合,即 javaTpoint.collection,其分片键为 { t : 10 }。 它创建一个范围,其下限为 10,上限为 20,位于 alpha 区域

现在,通过将 null 传递给 zone 字段,以下操作会删除先前创建的范围。

目标范围的边界必须与最小值和最大值匹配。 以下查询尝试删除旧范围,但指定 { t : 0 } 作为最小边界


下一主题#