我的应用程序目前被多个Spring Batch流程用来对数据库执行数次(本机)查询,历时2年,然后遍历该数据以与另一组数据进行比较以检测两者之间的模式。 为期2年的查询(通常每批次运行3个查询)大约需要一分钟才能检索出数百万个结果。
这里要注意的重要一点是,数据不会改变,只是数据的开始日期和结束日期每天都会增加一个。表示如果有了缓存机制,每天查询仅需要使用最新数据更新缓存,并删除该2年范围之外的最旧日期数据。当然,初始查询(以及在删除高速缓存后的任何查询)将需要再次执行整个操作。当前,每天有几次批处理运行执行此查询,每次都检索相同的结果。
如何在这里改善我的表现?看起来显而易见的解决方案是以某种方式利用缓存。我研究了一些机制,例如Redis。我在这种情况下经验不足,希望能对您的使用有所帮助。
相关的JPQL查询:
SELECT a.Account as externalAccount,
a.Serial as serialNum,
b.Account as toAccount
FROM ITEM_VIEW a, ITEM_VIEW b
WHERE b.TxnNum = a.TxnNum
AND b.[Date] = a.[Date]
AND a.[Date] >= :parmEndDate
AND a.[Date] <= :parmBeginDate
AND a.DBCR = 'D'
AND (a.Amount/100) >= :parmAmount
AND b.DBCR = 'C'