gpt4 book ai didi

mongodb - 通过散列键分片的集合的错误

转载 作者:可可西里 更新时间:2023-11-01 10:43:43 25 4
gpt4 key购买 nike

在分片集合中查询大量数据时,我们从并行查询分片中受益匪浅。以下问题只发生在通过哈希键分片的集合中。

在 Mongo 2.4 中,可以使用散列边界进行查询以获取一个 block 的所有数据。

我们使用了来自 this post 的查询.它是一个以散列值作为边界的范围查询:

db.collection.find(
{ "_id" : { "$gte" : -9219144072535768301,
"$lt" : -9214747938866076750}
}).hint({ "_id" : "hashed"})

同样的查询也适用于 2.6,但需要很长时间。

explain() 显示它正在使用索引,但扫描的对象太高了。

"cursor" : "BtreeCursor _id_hashed",

而且边界是错误的。

"indexBounds" : {
"_id" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},

从 2.4 到 2.6 有什么大的变化打破了这个查询吗?即使将边界解释为非哈希值,为什么要花这么长时间?

是否有其他方法可以获取一个 block 或哈希索引范围内的所有文档?

还有 mongo internal hadoop connector分片集合有这个问题。

谢谢!

最佳答案

在 2.4 中运行的上述查询行为不受支持。参见 SERVER-14557有类似的投诉和如何正确执行此查询的解释。为正确的行为重新格式化,您的查询变为:

db.collection.find().min({ _id : -9219144072535768301}).max({ _id : -9214747938866076750}).hint({_id : "hashed"})

正如 SERVER 票据中所报告的,还有一个额外的错误 (SERVER-14400) 会阻止此查询针对单个分片。目前还没有计划在 2.6 中解决。然而,这应该可以防止您在 2.6 下看到的表扫描并允许更有效的检索。

关于mongodb - 通过散列键分片的集合的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com