我经常以低效率来解决这个问题,因为它在优先级列表中总是很低,而且我的客户在事情破裂之前都拒绝改变。我想就如何加快速度提供一些意见。
我在 SQL 数据库中有多个信息数据集。该数据库是供应商设计的,因此我几乎无法控制结构。它是基于类的结构的 sql 表示。它看起来有点像这样:
Main-class table
-sub-class table 1
-sub-class table 2
-sub-sub-class table
...
-sub-class table n
每个表都包含类的每个属性的字段。存在一个包含每个子类的所有字段的连接,该连接包含类表中的所有字段和每个父类表中的所有字段,由唯一标识符连接。
有数百个班级。这意味着成千上万的视图和数万列。
除此之外,还有多个数据集,由 Main-class 表中的字段值指示。生产数据集对所有最终用户可见,还有其他几个数据集由来自各种集成源的相同数据的最新版本组成。
每天,我们都会运行将生产数据集与实时数据集进行比较的作业,并根据一组规则合并数据,清除实时数据集,然后重新开始。这些规则已经到位,因为对于特定类的特定值,我们可能更信任一个数据源而不是另一个数据源。
这些作业本质上是一系列 SQL 语句,它们逐行遍历每个数据集,并在每一行中逐个字段。常见的更改仅限于每行中的少数字段,但由于任何事情都可能改变,我们比较每个值。
有数以千万计的数据行,在某些环境中,合并作业可能需要超过 24 小时。我们通常通过投入更多硬件来解决这个问题,但目前这不是一个 hadoop 环境,因此在这方面可以做的事情非常有限。
您将如何扩展此问题的解决方案以使其没有限制?您将如何实现最有效的数据合并?(目前是逐场比较......非常缓慢)。