【问题标题】:Data Stitching Join/Merge - Oracle Vs Java based technique数据拼接连接/合并 - 基于 Oracle 与 Java 的技术
【发布时间】:2015-12-02 05:21:12
【问题描述】:

目前我面临一个明显的问题,我从 web 服务调用接收数据,同样需要加载到 Oracle 表中。

场景: - 我有一个非常大的表,有 500 列 - 所有列都是强制性的,并且没有选择拆分表。 - 数据集是 50m 条记录,我正在尝试从源系统导出 - 并且它不断增加 - 一次我通过向 web 服务(在源系统)发出请求来接收 50 列数据,因此我需要提交 10 个请求,每个请求 50 列以获得完整记录。 - 同样,在一个特定列集的请求中,我一次只能收到 100000 (1 lac) 条记录。

现在,要将相同的数据导入目标系统的 Oracle DB,我有以下两种选择: 1.先导出50列临时表的数据,然后对所有临时表运行join,创建全部500列的最终表 2. 触发 10 个并行请求,每个请求 50 列,并在我的 java 程序上拼接数据,然后发送包含所有 500 列的插入查询

在这里我想知道,哪种技术效果更好,是使用基于 Oracle 的表连接还是使用主键列在 java 端应用拼接?

由于数据集非常庞大,我只关注性能方面。还有更优化的方法来解决同样的问题吗?

【问题讨论】:

  • 如果数据库支持可编程功能(程序?),请使用带有一些临时表的功能。

标签: java oracle join dataset


【解决方案1】:

从性能的角度来看,基于 Oracle 的解决方案显然会胜出。从实现的角度来看(目标是一个清晰和简单的解决方案)Oracle 表再次获胜。原因如下:

  • 架构观点:结合应用中的数据将使您的应用有状态。从一个简单的无状态(receive-save-forget)应用程序,你可以把它变成一个复杂的状态感知(保存-查找联合记录-没有找到任何东西-存储-等待-再次查找-等等)。这更难开发、维护或调试。

  • 性能观点:将数据保存到多个表中,然后将它们组合到一个表中(通过视图或存储过程或简单的选择)是 Oracle 的设计目标。大量的开发时间用于优化这些基本功能。无论你想出什么来实现相同的功能(即使你知道一些细节)都可能表现得更差。

所以总的来说,我强烈建议选项 #1,让 Oracle 来做最难的部分。根据您希望在导入后如何使用此数据(几乎是实时的/偶尔/应用额外过滤后),您可以选择如何使用以下方法之一构建最终记录:

  • 存储过程
  • Oracle 作业
  • 观看次数。

【讨论】:

  • 我不太确定 Oracle 在这方面是明显的性能赢家,因为 Java 程序可以使用 Web 服务(获取 50 列的 100,000 条记录)并调用 Oracle 插入(对于第一组列)或更新(用于后续集)直接到最终表中。此外,通过 Java 代码使用 Web 服务更容易一些。这里没有赞成或反对 - 我仍然倾向于尽可能多地在 Oracle 中做,但我不确定这是一个灌篮。
  • “通过 Java 代码使用 Web 服务更容易一些” - 老实说,我什至从未想过发帖者会尝试实际使用 Oracle 的 Web 服务。 .. 我的意思是我已经看到将 jars 添加到 Oracle 数据库中,但这确实是最后的手段。我提出的解决方案只是一个简单的程序保存数据并保留一些数据库功能的加入。
  • 必须从 Web 服务获取数据并将其移动到 Oracle。如果那个“东西”是 Java,那么让 Java 将结果放入决赛桌可能会更容易/更快。
猜你喜欢
  • 2023-03-29
  • 2017-02-09
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2021-07-20
  • 2016-12-04
相关资源
最近更新 更多