【发布时间】:2017-11-23 13:47:28
【问题描述】:
问题:
我有来自 2 个不同应用程序的 2 个 SQL Server 数据库。他们描述了工业机器的不同方面:一个是关于“每个订单花费了多少消耗品”,另一个是关于“每个操作员生产了多少好/坏的产品”。有时很多操作员一个接一个地在处理一个订单,有时一个操作员在处理多个小订单,数据库中没有连接Order-Operator。
我想要一个统一的事实表,其中每个timestamp 我知道MachineID、OrderID 和OperatorID。如果 DB1 中存在timestamp,则记录将包含来自它的数字度量(消耗品);如果它存在于 DB2 中,那么它将具有来自 DB2 的数字度量(好/坏的生产项目)。如果它存在于两个数据库中,则它具有所有数字度量。一个简单的UNION ALL 是不够的,因为我希望每条记录都有MachineID、OrderID 和OperatorID。
我创建了一个 T-SQL 存储过程,通过时间戳和 MachineID 创建FULL JOIN。但是在大型数据集(多台机器,多个客户)上,它变得非常慢。这两个应用程序都支持编辑历史记录,因此我需要在每晚加载时合并两个数据库的完整历史记录。
为了加快处理速度,我想将计算放入多个并行线程中,由Customer、MachineID 和Year 分隔。
我试图通过使用 SQL Server 存储过程来做到这一点,通过不同参数的 SQL 代理并行运行,但我发现它对性能没有帮助。相反,它在更新登台表和最终表时创建了多个死锁。
我正在寻找解决此问题的替代方法,但我不知道什么是正确的工具。 Hadoop 或类似的并行处理工具可以帮助完成这项任务吗?
我正在寻找成本最低的解决方案,因为只有一项特定任务需要它。对于其他一切,SQL Server 和 PowerBI 报告对我来说都很好。
【问题讨论】:
标签: sql-server performance hadoop bigdata