【发布时间】:2020-08-27 10:40:33
【问题描述】:
我的用例是我需要将几列从表 A 复制到另一个表 B,并通过一些计算得出表 B 的其他几列的值。
根据目前的估计,每天将在表 A 中插入大约 50,000 行。
表 B 应在一天结束前更新所有数据。
因此,我可以使用触发器,该触发器将在表 A 上的 INSERT 操作中调用,或者在 EOD 安排一些作业,从表 A 批量读取所有数据,进行一些计算并插入表 B。
由于我是新手,我不确定应该为这个用例选择哪个选项。有什么更好的方法建议吗?
到目前为止,我所读到的关于触发器的内容,如果频繁调用它们会降低数据库的性能。
由于每天大约会发生 50,000 次插入操作,所以我可以假设 50,000 次属于触发无益的繁重操作吗?
编辑 1:每天 50,000 次插入操作将达到 100,000 次插入操作
使用 Postgres 数据库。
【问题讨论】:
-
因为您只需要在预定时间获取表 B 中的数据,因此预定作业总是会更好。如果您同时需要表 B 中的数据,则应使用触发器。
-
@AkhileshMishra 未安排时间,但在 EOD 之前,所有数据都应复制到表 B 中
-
EOD 是指在工作时间内?如果是,则有 2 种情况。 1. 如果您在固定时间在 EOD 之前停止在 TableA 中的插入,然后计划在固定时间传输 TableB 中的值,那么调度程序会更好 2. 如果您不能遵守第 1 点,请使用触发器。
-
8 小时内 50000 次插入并不多。如果你写好触发器,那么
insert的减速将不会被注意到。去扳机。您可以少操心一件事情。 -
我认为对于简单的
after insert for each row触发器来说,100000 甚至更多仍然可以。但是,如果当天没有交易,我根本不喜欢复制最后一天的最后一笔交易。数据就是数据,它应该是干净和正确的。如果没有交易,则不应有记录。考虑在提取查询中实现最后一天的逻辑。但要保持数据干净。
标签: postgresql triggers