【发布时间】:2021-11-10 23:32:11
【问题描述】:
让您了解数据:
DB 有一个集合/表,其中包含超过一亿个文档/记录,每个文档/记录包含 100 多个属性/列。预计数据量将很快增长数百倍。
对数据的操作:
对数据的操作主要有以下几种:
- 验证数据,然后将数据导入数据库,每天都会发生多次
- 对此导入数据的聚合
- 搜索/发现
- 更新
- 删除
使用的工具/软件:
- 用于数据库的 MongoDB:基于 PSS 架构的副本集、索引(大多数查询是 INDEX 扫描)
- NodeJS 使用 Koa.js
问题:
但是,该工具在聚合、查找等方面非常缓慢。
到目前为止,我为提高性能采取了哪些措施?:
- 数据库索引
- 缓存
- 预聚合(使用 MongoDB 聚合预先聚合数据,并在导入期间将其存储在不同的集合中,以避免在运行时聚合)
- 增加了数据库服务器上的 RAM 和 CPU 内核
- NodeJS 服务器和前端构建的独立服务器
- PM2 用于管理 NodeJS 服务器应用程序并用于生成集群
但是根据我的经验,即使在实现了上述所有操作之后,应用程序的性能也不够。我觉得这样做的原因是数据非常庞大。我不知道如何管理大数据应用程序以提供高性能。请指教。
另外,技术的选择是否不合适,或者改变技术/工具会有帮助吗?如果是,在这种情况下有什么建议?
我正在征求您的建议,以帮助我提高应用程序的性能。
【问题讨论】:
-
只是一个建议,但感觉你是在用数据搜索,为什么不使用弹性搜索?
-
不,它不是主要用于搜索。考虑一下这类似于数据分析。因此,大部分工作是在运行时基于某些过滤器进行聚合。
-
然而,为了避免运行时聚合,我们预先聚合了数据并根据聚合类型将其存储在多个集合中。当用户提出请求时,我们只需从预先聚合的数据中过滤数据,并在某些情况下对其进行最后一级的聚合。
-
@NItinVaja 你有什么建议吗?
-
你尝试过什么样的缓存?你自己缓存查询吗?还是缓存在其他地方?
标签: mongodb performance architecture aggregation-framework mongodb-replica-set