【问题标题】:Check if query result has changed, in order to not re-query for everything?检查查询结果是否已更改,以免重新查询所有内容?
【发布时间】:2019-02-28 04:45:36
【问题描述】:
我正在开发一个 java 应用程序,它可以从数据库中加载某些内容,例如客户记录和产品信息。当用户导航到“产品”选项卡时,我在数据库中查询产品并使用该信息更新表。
我想知道是否有办法查看自上次检查以来查询结果是否发生了变化,以避免从数据库中查询和加载所有信息,而只是加载更新。有没有办法做到这一点,或者只是将查询中的更改加载到我的表列表中?我的目标是让程序在选项卡之间切换时运行得更快。
【问题讨论】:
标签:
java
database
postgresql
resultset
【解决方案1】:
我想知道是否有办法查看自上次检查以来查询结果是否发生了变化
换句话说,您想要一种方法来自动回答“这是相同的结果吗?”这个问题。无需检索整个结果。
解决此问题的一般方法是为结果集的整个状态提供一些快速查询代理,然后进行查询。
一旦您确定了整个结果集的稳定快速计算,您就可以在相关数据发生变化的任何时候进行计算;并且仅轮询存储的代理以查看数据是否已更改。
例如,您可以说“lorem、ipsum 和 dolor 字段的 SHA-256 哈希”是您的代理。您现在可以:
在数据库中以函数的形式实现该计算,可能是products_hash。
创建一个latest_products_hash 表,其中存储created 时间戳和当时计算的products_hash。
在您的应用程序中,从latest_products_hash 检索最新记录并保留以供参考。
在数据库中,有一个计划的作业,或者触发您认为有意义的某个事件,这将自动计算 products_hash 并将其存储在 latest_products_hash 中,而无需应用程序执行任何操作。
为了确定是否有更新,应用程序将再次查询latest_products_hash 表,并将其最近的记录与应用程序存储以供参考的记录进行比较。
仅当latest_products_hash most-recent 值不同时,查询products 表并获取完整结果集。
这样,应用程序会频繁轮询更快的查询(latest_products_hash 中的最新记录),并避免完整的 products 查询,直到它知道结果集是新的。