实时历史数据比较 - 在 SQL 或代码中更快?
Historical Data Comparison in realtime - faster in SQL or code?
我目前正在做的项目中有一个需求,就是将一条记录的最新版本与之前的历史记录进行比较,以检测变化。
我正在使用 Azure 离线数据同步框架将数据从客户端设备传输到服务器,这会导致同步 table 中的记录根据用户更改进行更新。然后我有一个触发器将每个更新复制到历史记录 table 和一个 SQL 查询,该查询在构建更改列表时运行,通过进行列比较来比较当前记录与最近的历史记录 - 主要是字符串但一些整数和日期值。
这是实现此目标的最有效方法吗?将数据加载到内存并执行基于代码的规则比较会更快吗?
此外,如果我持续将所有历史数据存储在 SQL table 中,这会随着时间的推移影响性能吗?我最好将这些数据存储在 Azure Table 存储?我也在考虑成本问题,因为 SQL 使用比 Table 存储要贵得多,但显然我不能使用触发器,需要手动将每个同步行插入 Table 存储.
你可以完全避免查询和比较历史数据,因为最新版本已经在主table中(如果不是,那肯定是new/changed数据)。
考虑具有 50.000 条记录和 1.000.000 条历史数据记录(并且每天都在增长)的主table。
不是直接更新 main table 然后查询 1.000.000 条记录(并提取最近的记录),而是可以查询较小的 main table 以获取一条记录(可能是一个 ID),比较字段,并且仅当发生更改(或尚无数据)时更新这些字段并将记录添加到历史数据(或为此使用触发器/存储过程)。
这样您甚至不需要用于历史数据的数据库(可能包含多个索引),如果需要,您甚至可以将其存储在一个平面文件中,具体取决于您要对该数据执行的操作。
我使用的同步框架处理实际的数据变化,所以我只在有实际变化时才获得新的历史记录。给定一批记录的更新,我需要将所有更改与其先前状态进行比较,并生成更改内容的输出列表。
我目前正在做的项目中有一个需求,就是将一条记录的最新版本与之前的历史记录进行比较,以检测变化。
我正在使用 Azure 离线数据同步框架将数据从客户端设备传输到服务器,这会导致同步 table 中的记录根据用户更改进行更新。然后我有一个触发器将每个更新复制到历史记录 table 和一个 SQL 查询,该查询在构建更改列表时运行,通过进行列比较来比较当前记录与最近的历史记录 - 主要是字符串但一些整数和日期值。
这是实现此目标的最有效方法吗?将数据加载到内存并执行基于代码的规则比较会更快吗?
此外,如果我持续将所有历史数据存储在 SQL table 中,这会随着时间的推移影响性能吗?我最好将这些数据存储在 Azure Table 存储?我也在考虑成本问题,因为 SQL 使用比 Table 存储要贵得多,但显然我不能使用触发器,需要手动将每个同步行插入 Table 存储.
你可以完全避免查询和比较历史数据,因为最新版本已经在主table中(如果不是,那肯定是new/changed数据)。
考虑具有 50.000 条记录和 1.000.000 条历史数据记录(并且每天都在增长)的主table。
不是直接更新 main table 然后查询 1.000.000 条记录(并提取最近的记录),而是可以查询较小的 main table 以获取一条记录(可能是一个 ID),比较字段,并且仅当发生更改(或尚无数据)时更新这些字段并将记录添加到历史数据(或为此使用触发器/存储过程)。
这样您甚至不需要用于历史数据的数据库(可能包含多个索引),如果需要,您甚至可以将其存储在一个平面文件中,具体取决于您要对该数据执行的操作。
我使用的同步框架处理实际的数据变化,所以我只在有实际变化时才获得新的历史记录。给定一批记录的更新,我需要将所有更改与其先前状态进行比较,并生成更改内容的输出列表。