gpt4 book ai didi

MongoDB 计数很慢

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

我有一个收藏产品,里面有 ~7.000.000 本书和总共 ~40GB mongodb 3.4 数据库。这是一本书文档的示例:

{ 
"_id" : ObjectId("597f17d22be7925d9a056e82"),
"ean13" : "9783891491904",
"price" : NumberInt(2100),
"name" : "My cool title",
"author_name" : "Doe, John",
"warengruppe" : "HC",
"book_category_key" : "728",
"keywords": ["fairy tale", "magic", "fantasy"]
...
}

当我用limit查询数据库时,时间是可以的。但是如果我算查询(用于分页),那么它需要很长时间:

2017-08-02T13:03:16.088+0200 I COMMAND [conn74] 命令 mydb.products 命令:count { count: "products", query: { book_category_key: { $in: [ "120", "130", "180", "111", "112", "140", "150", "160", "170", "190", "1AA"] } }, readConcern: {} } planSummary: IXSCAN { book_category_key :1} keysExamined:1129826 docsExamined:1129825 numYields:8851 reslen:44锁:{全局:{acquireCount:{r:17704}},数据库:{acquireCount:{r:8852}},集合:{acquireCount:{r: 8852 } } } 协议(protocol):op_query 7008ms

这里是一个很好的查询:

{
count: "products",
query: {
book_category_key: {
$in: ["120",
"130",
"180",
"111",
"112",
"140",
"150",
"160",
"170",
"190",
"1AA"]
}
}

这需要 7 秒,有时甚至更多(最多 20 秒)。我在 book_category_key 上有一个索引:

{ 
"v" : 2,
"name" : "book_category_key_1",
"ns" : "mydb.products",
"background" : true
}

最佳答案

问题出在 planSummary: IXSCAN 上。当计数使用 IXSCAN 时,它也会进行 FETCH。像这样:

"planSummary" : "IXSCAN { book_category_key: 1 }",
"execStats" : {
"stage" : "COUNT",
.....
"inputStage" : {
"stage" : "FETCH",
....
"inputStage" : {
"stage" : "IXSCAN",
.....

在您的案例中,它加载了您整个收藏的大约 1/7。

您可以投票给https://jira.mongodb.org/browse/SERVER-17266和相关问题,并使用建议的解决方法强制 COUNT_SCAN:

let cnt = 0;
for(let category of ["120",
"130",
"180",
"111",
"112",
"140",
"150",
"160",
"170",
"190",
"1AA"]) { cnt += db.g.count({book_category_key: category})};
print(cnt);

这是什么

"planSummary" : "COUNT_SCAN { book_category_key: 1 }",
"execStats" : {
"stage" : "COUNT",
...
"inputStage" : {
"stage" : "COUNT_SCAN"
....

对于每个类别,如果索引适合内存,应该快约 10 倍。

关于MongoDB 计数很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45459939/

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