【问题标题】:How to improve application performance? [Updated]如何提高应用性能? [更新]
【发布时间】:2021-11-10 23:32:11
【问题描述】:

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

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

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

使用的工具/软件

  1. 用于数据库的 MongoDB:基于 PSS 架构的副本集、索引(大多数查询是 INDEX 扫描)
  2. NodeJS 使用 Koa.js

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

到目前为止,我为提高性能采取了哪些措施?

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

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

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

我正在征求您的建议,以帮助我提高应用程序的性能。

【问题讨论】:

  • 只是一个建议,但感觉你是在用数据搜索,为什么不使用弹性搜索?
  • 不,它不是主要用于搜索。考虑一下这类似于数据分析。因此,大部分工作是在运行时基于某些过滤器进行聚合。
  • 然而,为了避免运行时聚合,我们预先聚合了数据并根据聚合类型将其存储在多个集合中。当用户提出请求时,我们只需从预先聚合的数据中过滤数据,并在某些情况下对其进行最后一级的聚合。
  • @NItinVaja 你有什么建议吗?
  • 你尝试过什么样的缓存?你自己缓存查询吗?还是缓存在其他地方?

标签: mongodb performance architecture aggregation-framework mongodb-replica-set


【解决方案1】:

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

机器级

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

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

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

Node.JS 应用级别

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多