我目前正在进行的项目中有一个要求,将记录的最新版本与之前的历史记录进行比较以检测更改。
我正在使用 Azure 离线数据同步框架将数据从客户端设备传输到服务器,这会导致同步表中的记录根据用户更改进行更新。然后,我有一个触发器将每个更新复制到历史表和一个 SQL 查询中,该查询在构建更改列表时运行,通过进行列比较来比较当前记录与最近的历史记录 - 主要是字符串,但也有一些整数和日期值。
这是实现这一目标的最有效方法吗?将数据加载到内存中并与规则进行基于代码的比较是否会更快?
此外,如果我不断地将所有历史数据存储在 SQL 表中,这会随着时间的推移影响性能吗?我是否最好将此数据存储在 Azure 表存储等存储中?我也在考虑成本,因为 SQL 使用比表存储贵得多,但显然我无法使用触发器,并且需要手动将每个同步行插入表存储。
最佳答案
您可以完全避免查询和比较历史数据,因为最新版本已经在主表中(如果不是,它肯定是新的/更改的数据)。
考虑一个包含 50.000 条记录和 1.000.000 条历史数据记录(并且每天都在增长)的主表。
您可以在较小的主表中查询该一条记录(可能是 ID),比较字段,然后仅查询 1.000.000 条记录(并提取最新记录),而不是直接更新主表,然后查询如果有更改(或还没有数据),则更新这些字段并将记录添加到历史数据中(或使用触发器/存储过程)。
这样,您甚至不需要历史数据的数据库(可能包含多个索引),如果需要,您甚至可以将其存储在平面文件中,具体取决于您想如何处理该数据。
关于performance - 实时历史数据比较 - 使用 SQL 或代码更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010596/