首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于切分键的多个切分查询

基于切分键的多个切分查询
EN

Stack Overflow用户
提问于 2017-02-11 18:45:19
回答 1查看 2K关注 0票数 1

在浏览mongodb切分教程时,我遇到了以下断言:

如果在查询中使用shard键,它将点击--少量的碎片,通常只有一个--

另一方面,从我先前对切分的一些基本知识来看,我的印象是,如果查询是在shard键上激发的,mongos路由服务可以唯一地指出目标碎片。我的问题是-在什么情况下,基于切分键的查询有可能击中多个碎片?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 07:24:52

使用shard键的查询将针对碎片的子集来检索查询的数据,但取决于查询和数据分布,这可能只有一个或多到所有碎片。

借用MongoDB文档中关于碎片键的有用图像:

MongoDB使用shard键自动将数据划分为称为的切分键值的逻辑范围。默认情况下,每个块表示大约64 is的数据,并且与当前拥有该范围的shard键值的单个碎片关联。块计数是在可用碎片之间保持平衡,并且没有期望相邻的块位于相同的碎片上。

如果您查询属于单个块内的碎片键值(或值范围),则mongos肯定可以针对单个碎片。

假设块范围如上面的图像所示:

代码语言:javascript
复制
// Targeted query to the shard with Chunk 3
db.collection.find( { x: 50 } )

// Targeted query to the shard with Chunk 4
db.collection.find( {x: { $gte: 200} } )

如果查询跨越多个块范围,则mongos可以针对包含相关文档的碎片子集:

代码语言:javascript
复制
// Targeted query to the shard(s) with Chunks 3 and 4
db.collection.find( {x: { $gte: 50} } )

本例中的两个块要么位于相同的碎片上,要么位于两个不同的碎片上。您可以查看解释结果查询,以查找有关访问哪些碎片的更多信息。

还可以构造一个需要来自所有碎片的数据的查询(例如,基于大量的shard键值):

代码语言:javascript
复制
// Query includes data from all chunk ranges
db.collection.find( {x: { $gte: -100} } )

注:以上信息描述了基于范围的切分。MongoDB还支持基于散列的切分键,它(有意)在散列后将相邻的碎片键值分配到不同的块范围。对哈希碎片键的范围查询将包括多个碎片。见:散列与范围切分

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42179798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档