gpt4 book ai didi

Mongodb 缓慢更新循环

转载 作者:可可西里 更新时间:2023-11-01 09:18:23 26 4
gpt4 key购买 nike

我刚刚开始熟悉 Mongodb,这就是为什么我做了一些愚蠢的事情。我的每个数据集条目都包含一个时间戳(它们是推文)。我没有在插入之前将时间戳从字符串转换为实际的日期格式,而是将其简单地作为字符串插入。

现在,我的数据集变得越来越庞大(3+ 百万条推文),我想开始对我的条目进行排序/排列。由于我的时间戳仍然是一个字符串(“Wed Apr 29 09:52:22 +0000 2015”),我想将其转换为日期格式。

我在这个答案中找到了以下代码: How do I convert a property in MongoDB from text to date type?

> var cursor = db.ClockTime.find()
> while (cursor.hasNext()) {
... var doc = cursor.next();
... db.ClockTime.update({_id : doc._id}, {$set : {ClockInTime : new Date(doc.ClockInTime)}})
... }

而且效果很好。但是,它非常慢。根据 MongoHub 应用程序,它每秒仅处理 4 个查询。对于包含 3 多万条推文的数据集,转换大约需要 8.6 天。我真的希望有办法加快速度,因为我的截止日期是 8 天 :P

有什么想法吗?

最佳答案

另一种选择是使用批量操作,速度非常快,尤其是 the unordered variant ,因为它们可以并行应用。

var bulk = db.ClockTime.initializeUnorderedBulkOp()
var myDocs = db.ClockTime.find()
var ops = 0

myDocs.forEach(
function(myDoc) {
bulk.find(
{_id:myDoc._id}
).updateOne(
{$set : { ClockInTime: new Date(myDoc.ClockInTime) } }
);

if ( (++ops % 10000) === 0){
bulk.execute();
bulk = db.ClockTime.initializeUnorderedBulkOp();
}
}
)

bulk.execute()

关于Mongodb 缓慢更新循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30027608/

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