如何缩短具有缓存值的表的更新时间

时间:2019-08-29 10:40:30

标签: postgresql database-performance insert-update

我们将来自传感器的按时间顺序的值(浮点数)存储在postgres表S中。由于按时间顺序对数据进行了排序,因此我们还安装了时标插件。每当新传感器值到达时,必须将该传感器的最后一个已知值与新传感器进行比较。这需要从S查询最后一个值,这是很昂贵的(随着该表的增长和增长并包含大约1亿个实体-有很多传感器需要监视)。

由于这个原因,我们有另一个postgres表U,其中存储了对S的最后插入。我们需要确保较旧的传感器数据不能覆盖较新的数据(由于竞争条件,网络延迟等)。因此,对U的更新具有一个where子句来实现此目的。

现在的问题是,U中的更新比插入S中的更新慢6倍以上。保存到S和U中的更新必须一起并同步完成,因为必须同时显示保存到S的新值在美国。

因为是同步执行的,所以保存新传感器值的时间就是保存到S并更新U值的时间之和。由于我们每秒收到大量传感器数据的速度在这里确实很重要。我们可以将U从Postgres转移到一些分布式内存中商店。但是首选的解决方案不是在不同数据库技术的系统之间拆分相同的数据。

我考虑使用触发器,但是我认为这不会有太大帮助。无论从Java还是从数据库中执行where子句的更新,都不会改变更新本身的时间。我也尝试了pg_prewarm(例如SELECT pg_prewarm('U')),但是效果很小。

因此,对于任何有关如何更快地在U中进行更新的想法,我们深表感谢。

0 个答案:

没有答案