Mongodb 分片无法在分片之间分割大型集合

2024-03-02

我在 mongodb 中看似简单的分片设置时遇到了问题。

我有两个分片、一个 mongos 实例和一个配置服务器,设置如下:

机器 A - 10.0.44.16 - 配置服务器,mongos
机器 B - 10.0.44.10 - 分片 1
机器 C - 10.0.44.11 - 分片 2

我有一个名为“Seeds”的集合,它有一个分片键“SeedType”,该字段存在于集合中的每个文档中,并且包含四个值之一(请查看下面的分片状态)。其中两个值的条目数明显多于其他两个值(其中两个值各有 784,000 条记录,另外两个值大约有 5,000 条记录)。

我期望看到的行为是,带有 InventoryPOS 的“Seeds”集合中的记录最终将出现在一个分片上,而带有 InventoryOnHand 的记录将最终出现在另一个分片上。

然而,两个较大分片键的所有记录似乎最终都位于主分片上。

这是我的分片状态文本(为了清楚起见,删除了其他集合):


--- Sharding Status ---
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      { "_id" : "shard0000", "host" : "10.44.0.11:27019" }
      { "_id" : "shard0001", "host" : "10.44.0.10:27017" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "TimMulti", "partitioned" : true, "primary" : "shard0001" }
                TimMulti.Seeds chunks:
                        { "SeedType" : { $minKey : 1 } } -->> { "SeedType" : "PBI.AnalyticsServer.KPI" } on : shard0000 { "t" : 2000, "i" : 0 }
                        { "SeedType" : "PBI.AnalyticsServer.KPI" } -->> { "SeedType" : "PBI.Retail.InventoryOnHand" } on : shard0001 { "t" : 2000, "i" : 7 }
                        { "SeedType" : "PBI.Retail.InventoryOnHand" } -->> { "SeedType" : "PBI.Retail.InventoryPOS" } on : shard0001 { "t" : 2000, "i" : 8 }
                        { "SeedType" : "PBI.Retail.InventoryPOS" } -->> { "SeedType" : "PBI.Retail.SKU" } on : shard0001 { "t" : 2000, "i" : 9 }
                        { "SeedType" : "PBI.Retail.SKU" } -->> { "SeedType" : { $maxKey : 1 } } on : shard0001 { "t" : 2000, "i" : 10 }  

我做错了什么吗?

半不相关的问题:

在不阻塞整个 mongo 服务的情况下,以原子方式将对象从一个集合传输到另一个集合的最佳方法是什么?

提前致谢, -蒂姆


分片确实不应该以这种方式使用。您应该选择具有某种变化的分片键(或创建复合分片键),以便 MongoDB 可以生成合理大小的块。分片的要点之一是您的应用程序不必知道您的数据在哪里。

如果您想手动分片,您应该这样做:启动未链接的 MongoDB 服务器并从客户端自行路由事物。

最后,如果您真的致力于此设置,您可以自己迁移块(有一个 moveChunk 命令)。

平衡器根据内存中映射的数量来移动块(运行 serverStatus 并查看“mapped”字段)。这可能需要一段时间,MongoDB 不希望您的数据在生产中到处乱飞,所以它相当保守。

半不相关的答案:你不能通过分片原子地完成它(eval在多个服务器上不是原子的)。您必须执行 findOne、插入、删除操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongodb 分片无法在分片之间分割大型集合 的相关文章

  • 按 sum mongodb 分组[重复]

    这个问题在这里已经有答案了 这是我以前的 MySQL 查询 SELECT Count status as amt status FROM users GROUP BY status 这会返回类似的东西 amt status 3 0 210
  • 抛出新的 mongoose.Error.MissingSchemaError(name); ^ MongooseError:尚未为模型“商人”注册架构

    throw new mongoose Error MissingSchemaError name MongooseError 尚未为模型 商人 注册架构 使用 mongoose model 名称 模式 在 Mongoose model C
  • Meteor 独特客户端集合的发布/订阅策略

    使用 Meteor 我想知道如何最好地处理共享相同服务器端数据库集合的不同客户端集合 考虑以下示例 我有一个User集合 在我的客户端我有一个好友用户列表我有一个搜索功能 可以对整个用户数据库执行查询 返回一个与查询匹配的用户名列表 在发布
  • Mongodb 聚合使用 $group 两次

    我在 mongo 中有一堆文档 其结构如下 id number 2 colour id name Green hex 00ff00 position id name Defence type position ageGroup id nam
  • 在节点中使用mongoosejs更新多条记录

    我在使用 mongoosejs 和 Node js 更新多个记录时遇到问题 由于某种原因 即使有多个匹配 我也只更新一条记录 我还注意到回调在 update 之后不会触发 我没有收到任何错误消息 这里发生了什么 Page find stat
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • MongoDB 删除 MapReduce 集合

    由于客户端代码中的错误 mongodb 创建了许多 mr mapreduce 集合 如何将它们全部删除 可能通过掩码 我在交互式 shell 中运行脚本 function f var names db getCollectionNames
  • Spring mongodb 指南针缺少创建的数据/集合

    我使用 spring 将数据保存到数据库 RepositoryRestResource collectionResourceRel operators path operators public interface OperatorsRep
  • 节点 mongodb:错误:由于 parseError 连接已关闭

    使用本机 mongodb npm 包 我收到 Error connection closed due to parseError 进行非常基本的查询时 collections myCollection findOne id someID f
  • Mongodb upsert 嵌入文档

    我每天每米有一份文件 如果它不存在 如何在数据数组中添加另一个子文档并创建整个文档 key 20120418 123456789 data Meter 123456789 Dt ISODate 2011 12 29T16 00 00 0Z
  • MongoDB $geoIntersects 不适用于包含负顶点的多边形

    我已在数据库中存储了跨越 x 轴和 y 轴的多边形 并且我想搜索包含给定点的多边形 为此 我使用 geoIntersects 运算符来指定一个点 但是 当多边形穿过轴时 MongoDB 不会返回任何多边形 我可以对查询或架构进行任何小的更改
  • 如何从数组中删除重复的条目?

    在下面的示例中 Algorithms in C 出现两次 The unset修饰符可以删除特定字段 但如何从字段中删除条目 id ObjectId 4f6cd3c47156522f4f45b26f favorites books Algor
  • 如何验证 ObjectID

    使用 Joi 模式验证 是否可以针对 MongoDB ObjectID 进行验证 像这样的事情可能很棒 id Joi ObjectId required error errorParser 我发现如果我这样做 Joi object id J
  • 如何使用 Stripe 在一次操作中创建客户和卡片?

    我正在尝试第一次初始化客户 我有一个表格 他们可以在那里注册和填写所有内容 然后他们提交 在客户端上 会发生以下情况 var cardValues AutoForm getFormValues credit card form insert
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • Pymongo 批量插入

    我正在尝试批量插入文档 但批量插入时不会插入超过 84 个文档 给我这个错误 in insert pymongo errors InvalidOperation cannot do an empty bulk insert 是否可以批量插入
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • 获取对象数组中每个嵌套对象的虚拟属性?

    所以我知道如何获取单个虚拟属性 如 Mongoose 文档中所述 PersonSchema virtual name full get function return this name first this name last 但如果我的
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需

随机推荐

  • 常量对象与不可变对象

    我可以使用术语 常量对象 来代替术语 不可变对象 吗 虽然我感觉对象的不可变就像变量的常量一样 但我不确定这个术语是否被接受 请帮助我理解 事实上 在 Java 中这个术语constant没有明确的含义 它仅在 JLS 中出现在较大的术语中
  • `nextafter` 和 `nexttoward`:为什么要使用这个特定的接口?

    这种奇特的界面背后的原因到底是什么 nextafter and nexttoward 功能 https en cppreference com w c numeric math nextafter 我们指定方向通过指定我们想要移动的值tow
  • 为什么LinkedList和ArrayList扩展了Java中的AbstractList?

    Why LinkedList and ArrayList延伸AbstractList in Java 当我们想要在实现类中指定公共行为时 可以使用抽象类 但是里面的所有方法AbstractList被覆盖ArrayList and Linke
  • PlayFramework 2.2 Java 动作组合

    我一直在我的 Play 中使用动作合成 到目前为止 这些应用程序运行良好 然而 随着最近的 2 2 0 更新 它们不再工作 我不知道如何正确更新它们 以这个动作为例 public class ChatMsgValidation extend
  • 收到 HANDSHAKE_FAILURE 警报

    我正在编写一个 Java 客户端 在 weblogic 10 3 上 来调用安全的 Web 服务 我已获得客户端证书 该证书已安装在 cacerts DemoIdentity jks 和 DemoTrust jks 中 在我的 weblog
  • 在rails开发环境smtp cpanel上发送电子邮件ruby

    我在使用 ruby on Rails 发送电子邮件时遇到问题 当我使用 gmail smtp 时 它工作正常 但是当我尝试使用在 cpanel 中创建的电子邮件时 我现在似乎无法发送任何电子邮件 有谁知道如何配置这个 谢谢 这是初始化文件夹
  • aws s3 同步命令仅基于文件大小?

    是否可以运行 s3 同步命令 但仅根据文件大小上传文件 而不仅仅是包含文件的修改日期时间 我目前正在运行 aws s3 sync app dist s3 mywebsite me dist acl public read 我遇到的问题是我在
  • collectionView:cellForItemAtIndexPath: 永远不会被调用

    我有一个 UICollectionView 我只是想让它显示出来 我在界面生成器中将委托和数据源附加到文件的所有者 collectionView numberOfItemsInSection 被叫就好了 我已经搞砸了几个小时了 只是无法弄清
  • Android Room - 错误:无法弄清楚如何将此字段保存到数据库中

    详细日志 error Cannot figure out how to save this field into database You can consider adding a type converter for it privat
  • Xcode 6.x/iOS 8 隐藏横向状态栏

    使用 Xcode 6 x 构建的应用程序会在横向 iPhone 中自动隐藏状态栏 使用 Xcode 5 x 编译的同一应用程序不会这样做 如何防止应用程序在横向模式下隐藏状态栏 基本上 我怎样才能禁用 Apple Xcode 强加给我的这个
  • WPF-验证错误事件不会触发

    我想我已经阅读了所有相关文章 但没有一篇有帮助 我正在尝试启用 禁用保存按钮datagrid通过错误状态 但没有成功 这是我的代码 承包商 AddHandler Validation ErrorEvent new RoutedEventHa
  • Pandas:如何将具有重复索引值的数据帧转换为字典

    我有一个数据框df test如下 a b c 5 7 1 6 7 0 15 17 1 16 17 0 Question 我正在尝试从此数据帧创建一个字典 其中 b 列作为索引 请注意列中的值b被重复 当我使用下面给出的代码创建字典时 它仅将
  • 如何更改 Flutter 桌面应用程序的应用程序图标和应用程序名称?

    我正在使用 Flutter 开发 Windows 桌面应用程序 但不知道如何更改应用程序的名称和图标 我想我已经找到了解决方案 以下应该适用于 Windows 应用程序 更改应用程序图标 只需将图标文件放在下面windows runner
  • 如何测量Qt中函数的运行时间?

    我正在打电话argon2 https en wikipedia org wiki Argon2 Qt 中的内存密集型哈希函数并测量其运行时间 QTime start QTime currentTime call hashing functi
  • IIS 7 日志请求正文

    我需要记录向 IIS 发出的请求的请求发布负载 是否可以使用 IIS 7 5 中的现有日志记录和高级日志记录模块来配置请求发布有效负载的日志记录 或者任何人都可以引导我使用允许我记录发布有效负载的任何自定义模块 实际上是可以做到的 根据ht
  • (C# 7.2)“private protected”修饰符的用例是什么?

    C 7 2 引入了 private protected 修饰符 https learn microsoft com en us dotnet csharp language reference keywords private protec
  • laravel 5.4 中 ResetPasswords.php 中未定义路由 [password.reset]

    我在我的自定义应用程序中收到此错误 InvalidArgumentException in UrlGenerator php line 304 Route password reset not defined 我知道 laravel 提供了
  • 鼠标光标位置改变

    您好 我有一个 Windows 窗体应用程序 我想移动鼠标 然后拖放将起作用 但我尝试使用 mousemove 鼠标事件来执行此操作 但似乎拖放非常敏感 所以我要问的是是否可以检测鼠标光标是否从当前光标移动至少一定距离 然后执行拖放代码 我
  • 如何在 C# 中恢复 SQL Server 2012 数据库 .bak 文件?

    我在 Windows 窗体中开发了一个 MIS 其中我备份了 SQL Server 2012 数据库 但我无法恢复备份 bak file 这是我的代码 private void buttonRestore Click object send
  • Mongodb 分片无法在分片之间分割大型集合

    我在 mongodb 中看似简单的分片设置时遇到了问题 我有两个分片 一个 mongos 实例和一个配置服务器 设置如下 机器 A 10 0 44 16 配置服务器 mongos机器 B 10 0 44 10 分片 1机器 C 10 0 4