Mongoose(或类似的ODM)内存记录注册表?

Coo*_*ter 5 real-time mongodb node.js express socket.io

规范

我有一个包含记录集合的MongoDB,operations为了简单起见,我们称之为它们.其中一些operations正在运行,每个运行的都包含一系列events实时到达的系列.

我通过实时发布这些事件socket.io,并提供旨在提供最新事件列表的API端点.

目前的情况

看到事件快速连续到达(每秒高达数千),.save()对于每个传入事件,记录(在本例中我使用Mongoose作为对象映射器)似乎不是最理想的.目前的情况是我限制.save()调用只能每2秒执行一次.因此,无论何时operation正在进行,按需列表总是在实时流上落后0到2秒之间.

建议的优化

我正在考虑实现内存中的"注册表",其中包含对所有运行的引用operations(达到内存限制几乎不是一个问题,因为在可预见的未来将会有不超过10个并发运行的操作).

每当请求到达时,首先会搜索"注册表"以查找记录,如果找到,将从那里提供最新版本.如果没有,它实际上将查询数据库.


tldr:由于受限制的model.save()调用,实时和按需事件之间存在差距,建议的优化是对特定的记录子集使用内存存储.

这个问题

这是一个有效的优化还是我错过了Mongoose的观点,也许忽略了其他更可行/相关的解决方案?

Vip*_*bey 3

Redis 如果您还没有考虑过,我建议您看一下 Redis,您可以在将记录保存到 MongoDB 后使用 Redis 保存记录,如果可用则从 Redis 检索,如果不可用则查询 MongoDB 并再次保存到 Redis。

或者可以将 Cassandra 用于这两个目的?