数据拼接 Join/Merge - Oracle 与基于 Java 的技术
Data Stitching Join/Merge - Oracle Vs Java based technique
目前我面临一个明显的问题,我从网络服务调用接收数据,同样需要加载到 Oracle Table。
场景:
- 我有一个非常大的 table,有 500 列 - 所有列都是强制性的,没有选择拆分 table。
- 数据集是 50m 条记录,我正在尝试从源系统导出 - 并且它不断增加
- 一次我通过向 web 服务(在源系统)发出请求收到 50 列数据,因此我需要提交 10 个 50 列的请求以获得完整记录。
- 同样,在一次针对特定列集的请求中,我只能收到 100000(1 lac)条记录。
现在,要将相同的数据导入目标系统的 Oracle DB,我有以下两种选择:
1. 首先导出每个 50 列的临时 table 数据,然后 运行 连接所有数据以创建包含所有 500 列的最终 table
2. 触发 10 个并行请求,每个请求 50 列,并在我的 java 程序上拼接数据,然后发送包含所有 500 列的插入查询
在这里,我想知道哪种技术效果更好,可以使用基于 Oracle 的 table 加入或通过使用主键列在 java 端应用拼接?
由于数据集很大,我纯粹是看性能方面的。还有解决同样问题的更优化的方法吗?
从性能的角度来看,基于 Oracle 的解决方案显然会胜出。从实施的角度来看(旨在提供一个清晰简单的解决方案)Oracle 表再次获胜。原因如下:
架构观点:在您的应用程序中组合数据将使您的应用程序有状态。从一个简单的无状态(接收-保存-忘记)应用程序,您可以将它变成一个复杂的状态感知应用程序(保存-查找联合记录-没有找到任何东西-存储-等待-再次查看-等等)。这更难开发、维护或调试。
性能观点:将数据保存到多个表中,然后将它们组合成一个(通过视图或存储过程或简单选择)是 Oracle 的事情专为。大量的开发时间花在了优化这些基本功能上。无论您想出什么来实现相同的功能(即使您知道一些细节),都可能会表现更差。
总的来说,我强烈建议选项 #1,让 Oracle 来完成困难的部分。根据您希望在导入后如何使用此数据(几乎实时/偶尔/应用额外过滤后),您可以选择如何使用以下之一构建最终记录:
- 存储过程
- Oracle 职位
- 观看次数。
目前我面临一个明显的问题,我从网络服务调用接收数据,同样需要加载到 Oracle Table。
场景: - 我有一个非常大的 table,有 500 列 - 所有列都是强制性的,没有选择拆分 table。 - 数据集是 50m 条记录,我正在尝试从源系统导出 - 并且它不断增加 - 一次我通过向 web 服务(在源系统)发出请求收到 50 列数据,因此我需要提交 10 个 50 列的请求以获得完整记录。 - 同样,在一次针对特定列集的请求中,我只能收到 100000(1 lac)条记录。
现在,要将相同的数据导入目标系统的 Oracle DB,我有以下两种选择: 1. 首先导出每个 50 列的临时 table 数据,然后 运行 连接所有数据以创建包含所有 500 列的最终 table 2. 触发 10 个并行请求,每个请求 50 列,并在我的 java 程序上拼接数据,然后发送包含所有 500 列的插入查询
在这里,我想知道哪种技术效果更好,可以使用基于 Oracle 的 table 加入或通过使用主键列在 java 端应用拼接?
由于数据集很大,我纯粹是看性能方面的。还有解决同样问题的更优化的方法吗?
从性能的角度来看,基于 Oracle 的解决方案显然会胜出。从实施的角度来看(旨在提供一个清晰简单的解决方案)Oracle 表再次获胜。原因如下:
架构观点:在您的应用程序中组合数据将使您的应用程序有状态。从一个简单的无状态(接收-保存-忘记)应用程序,您可以将它变成一个复杂的状态感知应用程序(保存-查找联合记录-没有找到任何东西-存储-等待-再次查看-等等)。这更难开发、维护或调试。
性能观点:将数据保存到多个表中,然后将它们组合成一个(通过视图或存储过程或简单选择)是 Oracle 的事情专为。大量的开发时间花在了优化这些基本功能上。无论您想出什么来实现相同的功能(即使您知道一些细节),都可能会表现更差。
总的来说,我强烈建议选项 #1,让 Oracle 来完成困难的部分。根据您希望在导入后如何使用此数据(几乎实时/偶尔/应用额外过滤后),您可以选择如何使用以下之一构建最终记录:
- 存储过程
- Oracle 职位
- 观看次数。