performance - 实时历史数据比较 - 使用 SQL 或代码更快?

标签 performance azure azure-storage azure-sql-database

我目前正在进行的项目中有一个要求,将记录的最新版本与之前的历史记录进行比较以检测更改。

我正在使用 Azure 离线数据同步框架将数据从客户端设备传输到服务器,这会导致同步表中的记录根据用户更改进行更新。然后,我有一个触发器将每个更新复制到历史表和一个 SQL 查询中,该查询在构建更改列表时运行,通过进行列比较来比较当前记录与最近的历史记录 - 主要是字符串,但也有一些整数和日期值。

这是实现这一目标的最有效方法吗?将数据加载到内存中并与规则进行基于代码的比较是否会更快?

此外,如果我不断地将所有历史数据存储在 SQL 表中,这会随着时间的推移影响性能吗?我是否最好将此数据存储在 Azure 表存储等存储中?我也在考虑成本,因为 SQL 使用比表存储贵得多,但显然我无法使用触发器,并且需要手动将每个同步行插入表存储。

最佳答案

您可以完全避免查询和比较历史数据,因为最新版本已经在主表中(如果不是,它肯定是新的/更改的数据)。

考虑一个包含 50.000 条记录和 1.000.000 条历史数据记录(并且每天都在增长)的主表。

您可以在较小的主表中查询该一条记录(可能是 ID),比较字段,然后仅查询 1.000.000 条记录(并提取最新记录),而不是直接更新主表,然后查询如果有更改(或还没有数据),则更新这些字段并将记录添加到历史数据中(或使用触发器/存储过程)。

这样,您甚至不需要历史数据的数据库(可能包含多个索引),如果需要,您甚至可以将其存储在平面文件中,具体取决于您想如何处理该数据。

关于performance - 实时历史数据比较 - 使用 SQL 或代码更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010596/

相关文章:

azure - SAS for CloudBlob容器内的目录或路径

azure - 增加 azure 上的数据传输量

java - 如何加快java.net.ServerSocket和java.net.Socket效率?

Azure 数据工厂 - 使用存储事件触发器时排除容器内的文件夹

php - 从 Linux Windows Azure SDK 为 PHP 项目创建 cspkg 和 cscfg

user-interface - 用于创建 Azure 数据库表的 GUI

c# - 使用 `dynamic` 与 `object` 的性能成本?

database - Oracle 表空间分配/使用性能影响

java - 在 Java 中 : is where a way to create a subarray that will point to a portion of a bigger array?

.net - 如何创建单例以依赖注入(inject)Azure存储客户端和容器