gpt4 book ai didi

java - MySQL检查表是否有一些记录被改变

转载 作者:行者123 更新时间:2023-11-29 11:43:31 25 4
gpt4 key购买 nike

我正在开发一个Java应用程序,它使用MySQL数据库作为数据存储层。数据库中的配置表很少,但每个表都有数千条记录/行。当应用程序启动时,这些所有配置都会在相应的数据结构/bean(JAVA POJO)中缓存/加载到内存中。

一切都很好,只是每次应用程序启动时都会进行缓存,这通常需要 15-20 分钟,因为要缓存的数据很大,而且有些列具有 XML 字符串,需要解析该字符串然后将其存储在 beans 中。

那么有什么大不了的?

  • 当连续启动之间没有数据更改时,为什么我们要缓存??我可以将所有 bean 封装在一个通用的 Config bean 中并将其序列化。下次当我发现没有数据发生更改时加载此序列化对象 - 是的,当然加载序列化对象比数据库命中加上 bean 填充要快得多。

那么有什么办法可以解决这个问题吗?当然是在数据库级别。我会在应用程序启动时查询 - 自上次启动以来数据库表中是否有任何更改。如果是,则执行相同的旧无聊缓存过程并存储一些唯一标识符并序列化,或者如果最后一个标识符和当前标识符相同,则仅加载序列化对象。这个唯一标识符当然是持久的。

最佳答案

向表中添加 timestamp 类型的 last_updated 列。

当您需要检查表上是否有更改时,只需执行查询:

select max(last_updated) from YOUR_TABLE

如果 last_updated 是在您创建最后一个缓存副本之后,您可以使用与以下类似的查询仅使用自上次创建缓存以来更改的元素来更新缓存:

select * from YOUR_TABLE where last_updated > LAST_CACHE_UPDATE
<小时/>

正如评论中所解释的,强烈建议在 last_updated 列上添加索引。使用索引使您可以在 30 个步骤中检索包含 1.000.000.000 条记录的表中的最大值(而不是评论中提到的错误的 1.000.000.000)。

<小时/>

关于java - MySQL检查表是否有一些记录被改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35362807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com