如何有效地使用jpa将数据从一个表更新到另一个表

时间:2017-05-12 17:10:17

标签: java postgresql jpa

我有一个linux centos系统,并且正在使用postgres PostgreSQL 9.4.11数据库。

我有一个消息系统,其中消息存储在db中,并且收据被插入到具有更新状态的同一个表中(因此对于1个消息,表中添加了3行),每天有数百万行插入其中由于该表生成报告需要花费很多时间。我无法控制该表,使其将更新后的状态存储在同一行中。

我尝试过数据表分区来改进它,但它没那么有用。

所以为了解决这个问题,我开始将发送的消息存储在两个表中,当我收到收据时,我更新第二个表同一行并从中生成报告。为了做到这一点,我尝试使用触发器,但触发器非常慢,更新100k行,大约需要12个小时。

我尝试的第三个选项是我在java中创建了一个调度程序,它从大表中查询100条记录,并通过正确的id更新新表中的记录。 一个接一个地执行此操作根本不高效,因为它会增加服务器负载并且需要时间来更新数据。

我尝试了以下批量更新方法,一次更新所有收据: 我在数组中添加了所有id并设置了所需的状态和时间并执行了更新,但这不起作用,arrids数组显示1000条记录,更新计数仅显示更新的20或50条记录(显示一些随机计数)。 / p>

queryStm = "Update reciept set smsc_sub=:dlr,time_sub=:time,serverTime=:servertime  where id IN :arrids ";


Query query  = em.createNativeQuery(queryStm);
            query.setParameter("arrids ",arrids );
            query.setParameter("dlr", dlr);
            query.setParameter("time", time);
            query.setParameter("servertime", new Timestamp(new Date().getTime()));

            query.executeUpdate();

是否有任何有效的方法可以在java / jpa或postgres中将数据从另一个表更新到一个表中。

0 个答案:

没有答案