我正在设计一个带有 SQL 后端(Postgresql)的应用程序,我有一些设计问题。简而言之,数据库将用于存储动态发生的网络事件,因此插入速度和性能至关重要,因为“实时”操作取决于这些事件。数据被转储为几个表中的快速默认格式,我目前正在使用 postgresql 触发器将这些数据放入其他一些用于报告的表中。
在典型事件中,数据被插入到两个不同的表中,每个表共享相同的主键(事件 ID)。然后,我需要将数据移动并重新排列到一些不同的表格中,这些表格供基于 Web 的报告界面使用。我的主要目标/关注是保持初始插入表的负载,以便他们可以做他们的事情。报告是次要的,但通过触发器即时发生这种情况仍然很好,而不是我必须查询和管理已经处理的事件的 cron 作业。报告应该/永远不会触及初始插入表。性能明智..这有意义还是我完全离开了?
一旦数据在适当的报告表中,我就不需要在插入表中保留太久的数据,所以我会定期修剪这些数据以提高插入性能。在考虑这种我确信是半常见的场景时,我提出了三个选项:
使用触发器在初始行插入时触发并填充报告表。这是我最初的计划。
使用触发器将插入数据复制到临时表(相同格式),然后使用触发器或 cron 填充报告表。这只是一个想法,但我认为对临时表的简单复制操作将卸载上述解决方案中触发器的任何查询。
修改我的初始输出程序,将所有数据转储到一个表中(而不是跨两个表),然后在该插入上触发以填充报告表。因此,在解决方案 1 是多表到多表触发器的情况下,这将是多表触发器的单表源。
我是不是想太多了?我想把这件事做好。非常感谢任何输入!