【问题标题】:Insert data to Mongob Shard Cluster?向 Mongodb Shard Cluster 插入数据?
【发布时间】:2018-02-28 08:48:05
【问题描述】:

下面是我由 Ops Manager 创建的分片集群:

我有 2 个 Mongos 和 2 个 Shard(每个 shard 配置复制集)。我没有配置任何分片键,我的意思是我的集群中没有分片集合 esxit。

当我使用 mongos 插入数据库进行测试时,数据库只存储一个 Shard。

所以我希望在插入数据库时​​,数据可以拆分并在两个分片上存储余额。而且我可以从 mongos 查询得到准确的数据。

有人有同样的问题吗?

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

    数据库和集合不会自动分片:分片部署可以包含非分片数据和分片数据。将在primary shard 上为给定数据库创建非分片集合。

    如果您想对集合进行分片,您需要在连接到mongos 进程的mongo shell 中执行几个步骤以进行分片部署:

    有关具体步骤,请参阅 MongoDB 手册中的Shard a Collection

    为您的数据分布和用例选择一个好的分片键很重要。分片键选择不当可能会导致数据分布不均或限制分片性能。 MongoDB 文档提供了有关选择分片键的注意事项和选项的更多信息。

    如果您不确定某个集合是否已分片或希望查看当前数据分布的摘要,您可以在mongo shell 中使用db.collection.getShardDistribution()

    【讨论】:

      【解决方案2】:

      您需要实现区域范围,以便根据范围为每个碎片存储数据。

      下面的代码可以帮助您创建区域:

      对于 zone01 :

      sh.addShardTag("rs1", "zone01")
      sh.addTagRange("myDB.col01", { num: 1 }, { num: 10 }, "zone01")
      

      对于 zone02 :

      sh.addShardTag("rs2", "zone02")
      sh.addTagRange("myDB.col01", { num: 11 }, { num: 20 }, "zone02")
      

      这将帮助你Manage Shard Zones

      【讨论】:

      • 它不能解决我的问题。我现在不想使用 shard-key。我只想在插入数据时,数据将存储在两个分片上。你看到我上传的图片了吗?
      • 只有两种方法可以粉碎您的数据:1- 远程分片 2- 散列分片,对不起,您必须选择其中一种。
      • 所以如果没有以上两种方法我不能分片数据。我想知道当我插入时mongos如何选择分片来存储数据。我只在分片 1 中看到所有数据存储,为什么它不选择在分片 2 上存储。
      • 我不知道mongo默认选择哪一个,它必须是第一个分片(所有数据都会去它)。
      • 我使用 mongorestore -h mongos-host 数据总是存储在一个 Shard 上。所以如果 mongos 不能选择其他分片,我如何手动插入到其他分片
      猜你喜欢
      • 2016-04-01
      • 2022-12-17
      • 2020-10-28
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2013-03-06
      相关资源
      最近更新 更多