我使用 MongoDb,其中数据频繁更改(更新),每分钟一次。 数据通过 HTTP 从 MongoDB 认为第三方 API 应用程序获取。此外,API 数据在返回之前会进行额外聚合,例如计算第 N 页的最近 X 天的浏览量总和。
在某些情况下,不断增加的数据量(即这些集合中很少有从 6 GB 到 14 GB 的数据)会出现 2 - 7 秒的延迟,直到 API 返回聚合数据。提到的网络应用程序的延迟已经足够大了。 我想以某种方式减少这些延迟。
我所描述的情况使用了哪些模型? 也许首先我应该拒绝 HTTP API 的想法并将所有 API 逻辑移至服务器端?
自己的想法、考虑:
也许应该有两个独立的数据“处理器”:
1)第一个“处理器”应该执行所有聚合作业并只写入第二个。
2)第二个“处理器”所有数据只是返回,没有任何内部计算、聚合。
但是当第一次写入第二个数据存储时也可能存在引导问题,应该有更新新旧数据的逻辑,这也会影响性能。
最佳答案
该第三方应用程序似乎表现不佳,因此您应该放弃它。也许您可以通过重构数据模型或使用更好的聚合算法来解决您的问题。
预先计算
使用批处理处理器和实时处理器听起来是个好主意,但我认为您还不需要它(见下文)。如果您仍然想实现它,您应该阅读 Lambda architecture ,因为它解决了您的方法可能存在的一些问题。
This approach to architecture attempts to balance latency, throughput, and fault-tolerance by using batch processing to provide comprehensive and accurate precomputed views, while simultaneously using real-time stream processing to provide dynamic views. The two view outputs may be joined before presentation.
数据模型 ( 6 rules of thumb )
你说有很多更新,这在使用 MongoDB 时是一个危险信号。由于 MongoDB 的分布式特性,某些更新可能会减慢 MongoDB 的速度。例如,尝试插入子文档,而不是更新字段。但这不是一门精确的科学,因此如果没有看到数据模型,我就无能为力。
聚合框架
数据库是为数据而生的,因此将数据聚合转移到 MongoDB 中。 map 缩减为slow on MongoDB ,因此使用 Aggregation Framework .
关于php - 用于 php 的 mongodb 服务器端 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956310/