gpt4 book ai didi

performance - 如何提高 MongoDB 中 update() 和 save() 的性能?

转载 作者:搜寻专家 更新时间:2023-10-31 22:18:04 24 4
gpt4 key购买 nike

我正在寻找有关如何在以下情况下提高数据库性能的提示。

作为示例应用程序,我今天编写了一个相当简单的应用程序,它使用 Twitter 流 API 来搜索某些关键字,然后我将结果存储在 MongoDB 中。该应用程序是用 Node.js 编写的。

我正在存储 2 个集合。一个存储关键字和一组推文 ID,这些推文 ID 引用找到的提到该关键字的每条推文。使用带有 {upsert:true} 的 .update() 将这些添加到数据库中,以便将新 ID 附加到“ids”数组。

此集合中的示例文档如下所示:

{ “_id”:ObjectId(“4e00645ef58a7ad3fc9fd9f9”), “ids”:[“id1”,“id2”,“id3”], “关键词”:“#巧克力”

更新代码:

 keywords.update({keyword: key_word},{$push:{ids: id}},{upsert:true}, function(err){})

第二个集合看起来像这样,只需使用 .save() 即可添加

 {
"twt_id": "id1",
"tweet": { //big chunk of json that doesn't need to be shown }
}

我现在已经在我的 Macbook 上运行了这个程序,它已经运行了大约 2 个小时。我正在存储大量数据,每分钟可能有数百个文档。目前 Mongodb 中的对象数量为 120k+。

我注意到,自从我开始最新的测试运行以来,数据库进程的 CPU 使用率高达 84%,并且一直在逐渐上升。

我正在阅读有关设置索引的内容,但由于我正在添加文档而不是针对它们运行查询,所以我不确定索引是否有帮助。我想到的一个方面是 update() 可能正在执行查找,因为我正在使用 $push 并且索引可能有助于查找。

我应该注意什么以防止 MongoDB 消耗越来越多的 CPU?

最佳答案

您很可能遇到了 MongoDB 中一个非常常见的瓶颈。由于您通过添加字符串非常频繁地更新文档,因此您很可能会用完该文档的空间并迫使数据库通过在尾端重写该文档来不断将该文档移动到内存\磁盘中的不同空间数据文件。

添加索引只会损害写入性能,因此除非您的读取量很大,否则无助于提高性能。

我会考虑更改您的应用程序逻辑来执行此操作:

  1. 关键字字段索引
  2. 每次检测到推文时,在向数据库中插入任何内容之前,先查询包含该关键字的文档。如果它不存在,则插入一个新文档,但通过在数组中添加一大堆假字符串来填充 ids 属性。然后在插入它之后立即从该数组中删除所有 id。这将导致 mongodb 为整个文档分配额外的空间,这样当您开始向 ids 字段添加 id 时,它将有足够的增长空间。
  3. 将推文的 ID 插入到 ids 字段中

关于performance - 如何提高 MongoDB 中 update() 和 save() 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423988/

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