gpt4 book ai didi

mongodb 聚合查询 64 MB 限制

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

我确实有一个包含超过 10 亿个对象的表,如下所示:

{
"_id" : ObjectId("5893ae4f7a5449caebba5848"),
"id" : NumberLong(1234567890),
"inserted_at" : ISODate("2017-02-02T22:10:23.812Z")
}

保存在mongodb 3.2.11上。

我每周插入近 5000 万条新记录,需要将新一周的记录与前一周的记录进行比较。

因此,我构建了一个这样的查询:

db.getCollection('table').aggregate(
[
{"$group" : {
"_id": {
"year": { "$year": "$inserted_at"},
"week": { "$week": "$inserted_at"}},
"Content_IDs": { "$push": "$id"}}},
{ "$sort": {'_id.year': -1, '_id.week': -1}},
{ "$limit": 2},



{ "$group": {
"_id": null,
"Last": { $first: "$Content_IDs" },
"Previous": { $last: "$Content_IDs"}
}},

{ $project: {
"Outgoing": { $setDifference: [ "$Previous", "$Last" ] },
"Incoming": { $setDifference: [ "$Last", "$Previous" ] }}},
],
{allowDiskUse:true}
)

但是mongodb因为数据量大无法计算出结果。

错误如下:

assert: command failed: { "ok" : 0, "errmsg" : "BufBuilder attempted to grow() to 134217728 bytes, past the 64MB limit.", "code" : 13548 }

我试图将所有记录提取到 Python env 中,以便我可以在那里计算结果,但是当我在 pymongo.aggregate 上运行以下管道时,我遇到了同样的错误:

[
{"$group" : {
"_id": {
"year": { "$year": "$inserted_at"},
"week": { "$week": "$inserted_at"}},
"Content_IDs": { "$push": "$id"}}},
{ "$sort": SON([('_id.year', -1), ('_id.week', -1)])},
{ "$limit": 2}
]

它适用于较小规模的数据。我怎样才能使这个查询更具可扩展性?有什么建议吗?

非常感谢!

最佳答案

我遇到了类似的问题,我开始使用 Spark(和 Scala)来操作我的数据。没有太多内存限制,可以集群使用,比nodejs快。

关于mongodb 聚合查询 64 MB 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261908/

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