Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL检查表是否更改了一些记录_Java_Mysql_Sql_Database - Fatal编程技术网

Java MySQL检查表是否更改了一些记录

Java MySQL检查表是否更改了一些记录,java,mysql,sql,database,Java,Mysql,Sql,Database,我正在开发一个Java应用程序,它使用MySQL数据库作为数据存储层。数据库中的配置表很少,但每个表都有数千条记录/行。当应用程序启动时,所有这些配置都被缓存/加载到内存中相应的数据结构/bean(JavaPOJO)中 一切都很好,只是每次应用程序启动时都会进行缓存,这通常需要15-20分钟,因为要缓存的数据很大,而且有些列具有XML字符串,这些字符串被解析后存储在bean中 那有什么大不了的 在连续启动之间没有数据更改时,为什么要缓存。??我可以将所有bean封装在一个公共配置bean中并序

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

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

那有什么大不了的

  • 在连续启动之间没有数据更改时,为什么要缓存。??我可以将所有bean封装在一个公共配置bean中并序列化它。下次当我发现没有数据被更改时,加载这个序列化对象——是的,加载序列化对象的速度当然要比数据库命中加bean填充快得多
有没有办法让我弄明白?
当然是在数据库级别。我会询问应用程序何时启动——自上次启动以来,数据库表中是否有任何更改。如果是,则执行相同的旧缓存过程并存储一些唯一标识符并序列化,或者如果最后一个标识符和当前标识符相同,则只加载序列化对象。此唯一标识符当然是持久性的。

在表中添加
时间戳类型的
上次更新的

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

select max(last_updated) from YOUR_TABLE
如果上次更新的\u是在您创建上次缓存副本之后更新的,则您可以仅使用自上次创建缓存以来更改的元素来更新缓存,并使用类似以下查询:

select * from YOUR_TABLE where last_updated > LAST_CACHE_UPDATE

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



如果经常重新启动应用程序,并且缓存可以位于诸如redis或hazelcast之类的非内存数据结构中,请将其用作缓存,而不是jvm内存。更新数据时,更新两侧

有那么简单吗?他仍然需要通过逐个比较日期来检查更改了哪一行是的,如果在上次更新的列上添加索引,并且使用索引,这是“简单的”,但这并不是一个好问题的最佳答案。这是第一个简单的答案,我也是。如果他有1亿行,且有1行已更改,他必须检查1亿个日期,以确定哪一行已更改?否,如果存在索引,则只执行log2(100.000.000)=27次检查。在我的情况下,配置/记录也可能被删除。因此,这个解决方案是不可行的。它只有在能够更新通过redis传递的记录时才起作用。如果更新是通过sql客户机直接完成的,则不会考虑缓存的目的,当需要更新记录时,请同时更新数据存储和缓存!只有在可以直接访问数据存储的情况下,才能找到查看数据库中存在的数据是否已更改的最佳方法。mysql校验和表呢。我尝试更改行的列数据,但校验和已更改。