我们使用一个基于事件的系统,其中使用postgres数据库来存储审计事件。目前,我们使用postgres物化视图来存储任何事件的最新条目。对于任何修改数据的事件,我们都会更新主事件审核表,并刷新物化视图,但这非常耗时。我们使用下面的python代码来刷新视图,但它只是删除旧视图并重新创建它,这非常耗时
await connection_pool.execute(
"REFRESH MATERIALIZED VIEW CONCURRENTLY events_current"
)
我想这不是正确的处理方法,我的方法是创建一个新表,并将事件的最新数据保存在那里。请让我知道这是否合适,或者是否有更好的方法
如果需要更多信息,请告诉我
物化视图不是一个糟糕的解决方案,但前提是您可以将其视为“时间点”(工作日开始,或在最后3小时内……)。对于“此时此刻”的需求,这不是一个好的解决方案。你的似乎是后者
最好的选择是创建一个获取最新数据的视图。如果由于审计事件的大小,这是不可行的,那么需要寻找其他地方。我不喜欢创建包含最新数据的表。这就是复制数据,而复制数据的必然性最终是不同的。但是我想到了一个小小的转变:创建一个只包含事件id和事件审计日志id的表,只维护最后一个审计id。如果没有完整的表定义(ddl),我只能显示一个框架设置,但您应该明白了
然后,您可以在同一触发器中维护事件审核和事件上次审核。比如:
见demo
相关问题 更多 >
编程相关推荐