首页 > 解决方案 > 如何提高应用性能?[更新]

问题描述

为了让您了解数据
DB 有一个集合/表,其中包含超过一亿个文档/记录,每个文档/记录包含 100 多个属性/列。预计数据量将很快增长数百倍。

对数据的操作:
对数据的操作主要有以下几种:

  1. 验证数据,然后将数据导入数据库,每天发生多次
  2. 对此导入数据的聚合
  3. 搜索/发现
  4. 更新
  5. 删除

使用的工具/软件

  1. MongoDB for database:基于 PSS 架构的副本集、索引(大部分查询都是 INDEX 扫描)
  2. 使用 Koa.js 的 NodeJS

问题
但是,该工具在聚合、查找等方面非常缓慢。

到目前为止,我为性能实施了什么?

  1. 数据库索引
  2. 缓存
  3. 预聚合(使用 MongoDB 聚合预先聚合数据并在导入期间将其存储在不同的集合中,以避免在运行时聚合)
  4. 增加数据库服务器上的 RAM 和 CPU 内核
  5. NodeJS 服务器和前端构建的单独服务器
  6. PM2 管理 NodeJS 服务器应用程序和生成集群

但是根据我的经验,即使在实现了上述所有操作之后,应用程序的性能也不够。我觉得这样做的原因是数据非常庞大。我不知道如何管理大数据应用程序以提供高性能。请指教。

此外,技术的选择是否不合适,或者改变技术/工具会有帮助吗?如果是,在这种情况下有什么建议?

我请求您提供建议,以帮助我提高应用程序的性能。

标签: mongodbperformancearchitectureaggregation-frameworkmongodb-replica-set

解决方案


很难给出正确的答案,因为我们真的没有那么多细节。我要做的是详细的监控,至少如下:

机器等级

  • 监控数据库机器上的总体 CPU 负载(所有内核)和 RAM 使用情况
  • 监控存储数据的磁盘上的磁盘 IO
  • 这应该表明,如果机器规格是瓶颈

数据库和数据库进程级别(我的第一个猜测,这是关键部分):

  • 目前您的数据的总体大小是多少(我知道,它会急剧增加,但如果它现在已经变慢,这可能是一个有趣的信息 - 特别是与当前 RAM 大小和 CPU 内核数量有关)
  • 监视 mongo DB 进程的内存使用情况和 CPU 负载...
  • 查看查询计划(在进行聚合时)是否指导您,可以进行哪些改进?
  • 看看缓存策略。你使用什么策略?
  • 这应该会给出更详细的结果,说明在数据库级别进行改进的地方。仅仅是因为硬件瓶颈还是聚合问题...

Node.JS 应用级别

  • node.js 应用程序:这个需要多少 RAM 和 CPU 使用量......?
  • 如果 node.js 应用程序有多个实例,请跟踪所有实例
  • 数据导入也是通过 nodejs 应用程序进行的。导入数据时应用程序的负载是否会急剧增加?
  • 如果您发现此应用程序负载很高,需要在此处采取行动(增加实例,将其拆分为单独的应用程序(例如作为单独的应用程序导入)

推荐阅读