4

我正在开发一个 Java REST API,它使用来自 postgreSQL 数据库的客户端数据。

数字: 。一开始约有600个客户。他们中的一些人每隔几秒钟就发出一次请求

由于客户端按请求付费,我们需要控制他们的成功请求数是否达到限制,并且在每次请求后查询postgresql数据(更新'hitsCounter'字段的值)在性能方面很差,我们正在考虑实现带有redis的缓存系统。

想法: 在客户端完成第一个请求后,我们从 postgresql 中检索他的数据并将其存储到 redis 缓存中。然后使用此缓存数据,例如增加“hitsCounter”键值,直到客户端停止执行请求。 并行地,每隔几分钟,后台进程就会将数据从 redis 缓存持久化到 db 表中,因此最后我们将更新的数据返回到 postgresql,我们可以在以后处理它们。

我认为它显然会提高性能,但我不确定这个“后台进程”。一个选项是检查缓存元素的 TTL,如果它小于某个值(这意味着客户端已完成请求),则保留数据。

我很想听听对此的一些意见。这是一个好主意吗?你知道一些更好的选择吗?

4

1 回答 1

6

完全合理的想法,但你没有提到你所做的任何测量。您的目标硬件与您的目标事务级别的瓶颈是什么?不知道,你不能说。

您也许可以使用未记录的表。只需在每个查询中插入一行,然后每 5 分钟汇总一次,清除旧数据。再说一次,使用 HOT 更新,假设 75% 的填充因子可能更新更有效。我不知道(你也不知道)我们没有测量它。

不够?将其粘贴在 ssd 上自己的表空间中。

不够?将其粘贴在自己的虚拟机/机器上。

不够?只需将这些该死的东西写入每个前端盒上的平面文件,然后每分钟将数据批处理一次到数据库中。

另外——他们每次查询要付多少钱?您是否关心电源故障并丢失五秒钟的查询日志?您是否需要能够使用原始详细信息和时间戳来重现每个查询的收据?

于 2013-04-26T21:58:20.187 回答