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的观点,也许忽略了其他更可行/相关的解决方案?
Redis 如果您还没有考虑过,我建议您看一下 Redis,您可以在将记录保存到 MongoDB 后使用 Redis 保存记录,如果可用则从 Redis 检索,如果不可用则查询 MongoDB 并再次保存到 Redis。
或者可以将 Cassandra 用于这两个目的?
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |