【发布时间】:2018-01-19 12:16:01
【问题描述】:
在 NodeJS 应用程序中,我必须保持“最近 N 分钟谁在线”状态。由于可能有成千上万的在线用户 - 出于性能原因 - 我决定不为此任务更新我的 Postgresql user 表。
我选择使用 Redis 来管理在线状态。它非常简单高效。
但现在我想对user 表进行复杂查询,按在线状态排序。
我正在考虑从 Redis 快照创建一个每分钟填充一次的 online 表,但我不确定这是否是最佳解决方案。
在表填充之后,引用online 表的下一个查询是否会因新索引的创建或加载而受到很大影响?
有人知道更好的解决方案吗?
【问题讨论】:
-
什么样的复杂查询?
-
有一个用于 PostgreSQL 的 redis 外部数据包装器 - github.com/pg-redis-fdw/redis_fdw 我将它用于我们的一个应用程序,通常它工作正常。但是查询总是有一些限制 - 关于它可以翻译和使用的条件。所以你也可以在这里遇到它。另一个 FDW 甚至允许写入 redis - github.com/nahanni/rw_redis_fdw
-
加上另一个注意事项——你很可能知道——可能比我更好:-)——redis 在事务和隔离级别方面的行为与 PG 不同。因此,使用 FDW,您可能会看到从 redis 中选择的数据存在一些细微的不一致。
-
用户之间存在关系(朋友、被屏蔽...),因此查询可以是“向我展示具有此类品质的用户,按在线状态排序并丢弃屏蔽我的用户”。
标签: node.js postgresql import redis synchronization