gpt4 book ai didi

java - DB中应触发定时事件的记录 = 如何高效实现?

转载 作者:行者123 更新时间:2023-12-02 08:07:16 27 4
gpt4 key购买 nike

问题:
这是一个非常有趣的问题:我在数据库中有大量记录,这些记录本身与“触发时间”(= future 的日期)相关联。如果这个时间正确/达到,记录应该执行/触发特定操作。多个线程会同时更新一条记录。所以这个时间不是固定的,可以通过不同的线程来改变...

解决方案:
投票:
我当然可以一遍又一遍地查询有“超时”的记录。最后,如果事件/记录超时,我将不得不编写一个仅执行查询(通过 SQL)的循环。但这对数据库有这样的轮询循环是没有好处的!?
线程:另一种方法是将它们全部保留在内存中,例如使用“执行器框架”或使用 Quartz 作为线程。从 JAva 的角度来看,这是合乎逻辑的,而且很可能是非常好的时机。但那样我就会有数千个线程......

问题:
有哪些更好的方法可以解决这个问题?欢迎任何建议/想法,以便我可以对其进行进一步的研究。

非常感谢!!

最佳答案

根据数据库的不同,有些数据库有“通知”(我在这里想到的是 Postgres)。它允许你启动一个进程,并让 PG 中的其他事情发生时通知你。

即在这种情况下,当记录因超时而更改时,您可以有一个触发器通知您的计时进程(位于完全不同的数据库连接上),然后它可以插入 @at 记录、或 cron 条目或其他任何内容您需要自行管理和执行操作。

在最新版本的PG中,您可以将数据与通知一起发送,即您可以发送更改的记录的PK值。

Clients --> [Postgres]  -----------<> Record Monitor client ---- > process records()
| |
records_table |
| |
\_ timing_Trigger() --/
on_update/insert/delete notify RecordMonitorClientOfChange.

关于我会做什么的 super 蹩脚图表。

关于java - DB中应触发定时事件的记录 = 如何高效实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com