我是PostgreSQL的新手,我想知道以下方面或有一些线索:
我的问题是:我有一个SSO,当用户执行某项操作(登录,注册,更新信息)时,该行会在事件表中插入行。我需要在另一个解决方案(忠诚度计划)中实时利用这些插入内容。
现在,我要记住每分钟查询一次表(在nodeJS中),并将表的大小与前一分钟的大小进行比较。我认为这不是好方法:)
答案 0 :(得分:1)
原则上,您可以使用触发器来做到这一点。如果API在数据库外部,则需要使用C或PL / Perl或PL / Python等语言编写的触发函数,可以执行所需的操作。
但是,除非可以保证此动作是快速的,否则在触发器中运行它可能不是一个好主意。触发器与触发语句在同一事务中运行,因此,如果您的触发器碰巧运行了很长时间,则最终将导致长时间的数据库事务。这有两个主要缺点:
锁被保留很长时间,这会损害并发性和性能,并增加死锁的风险。
Autovacuum无法删除在事务开始时仍处于活动状态的死行,这可能导致繁忙表上的表过多膨胀。
为避免这种风险,通常最好使用排队系统:触发器在队列中创建一个条目,这是一项快速动作,工作进程在数据库外部异步读取和处理这些队列条目。
在数据库中实现队列非常困难,因此您可能需要寻找现有的解决方案。