mongodb - MongoDB 分片路由器是否操纵 $in 查询?
问题描述
有一个名为“items”的集合,它由 3 个分片分片
每个分片有 3 个文档
- id:1 的文档 -> 属于 shard1
- id:2 的文档 -> 属于 shard2
- id:3 的文档 -> 属于 shard3
当我查询路由器(mongos)时: items.find({id: { $in: [1,2,3] }})
路由器是否操纵每个分片的查询?ex) items.find({id: { $in: [1] }}) => 将查询路由到 shard1
我想知道路由器是否只检测映射分片或修改分片查询
解决方案
据我所知,查询没有以任何方式被操纵。相反,查询被路由到任何可能包含基于查询的分片键部分的相关数据的分片。在查询不包含分片键的情况下,查询将被路由到所有分片。
例如,如果您在id
字段上分片,items.find({id: { $in: [1,2,3] }})
则将被发送到shard1
、shard2
和shard3
,而items.find({id: { $in: [1] }})
只会发送到shard1
。此外,查询items.find({ref_id: { $in: [1] }})
将发送到shard1
、shard2
、shard3
以及您集群中可能拥有的任何其他分片。
对分片键字段的索引扫描应该足够快,以至于操作查询甚至都不是必需的,无论如何!
推荐阅读
- python - 从 Python 3 中的并行文件夹导入。如何做得很好?
- javascript - 角度上的 jsplumbtoolkit 未正确应用锚点
- c# - Gulp 任务未完成如何等待 Promis 解决?
- google-sheets - 如何使用 Google 表格中另一个单元格中的日期值在日期列上应用条件格式?
- linux - gdb 不适用于 xv6:在 qemu-nox-gdb 之后冻结
- android-studio - Kotlin Multiplatform Mobile 找不到 klib 包
- reactjs - 通过 Formik 向服务器发送数据
- asp.net-core - ASP.NET Core 中的 gRPC 身份验证,正确响应
- reactjs - 在异步函数中捕获错误时,useEffect in react 不重新渲染
- deployment - Nvidia v100 和 RTX 3090Ti 可用于部署