数据拼接连接/合并-Oracle与基于Java的技术

数据拼接连接/合并-Oracle与基于Java的技术,java,oracle,join,dataset,Java,Oracle,Join,Dataset,目前我面临一个截然不同的问题,我从一个webservice调用接收数据,同样需要加载到Oracle表中 情景: -我有一个非常大的表,有500列-所有列都是必需的,并且没有选择拆分表。 -数据集是5000万条记录,我正试图从源系统中导出这些记录,并且其数量不断增加 -我通过向webservice(在源系统)发出请求,一次收到50列数据,因此我需要提交10个请求,每个请求50列,以获得完整记录。 -同时,对于特定的列集,我一次只能收到100000(1 lac)条记录 现在,要将相同的数据导入目标系

目前我面临一个截然不同的问题,我从一个webservice调用接收数据,同样需要加载到Oracle表中

情景: -我有一个非常大的表,有500列-所有列都是必需的,并且没有选择拆分表。 -数据集是5000万条记录,我正试图从源系统中导出这些记录,并且其数量不断增加 -我通过向webservice(在源系统)发出请求,一次收到50列数据,因此我需要提交10个请求,每个请求50列,以获得完整记录。 -同时,对于特定的列集,我一次只能收到100000(1 lac)条记录

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

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


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

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

  • 架构观点:将应用程序中的数据组合在一起将使应用程序有状态。从一个简单的无状态(receive-save-forget)应用程序,您可以将其转换为一个复杂的状态感知应用程序(保存联合记录的查找未找到任何内容存储等待再次查找等)。这很难开发、维护或调试

  • 性能观点:Oracle的设计宗旨是将数据保存到多个表中,然后将它们合并到一个表中(通过视图、存储过程或简单选择)。在优化这些基本特性上花费了大量的开发时间。无论你想出什么方法来实现相同的特性(即使你知道一些细节),结果都可能更糟

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

  • 存储过程
  • 甲骨文乔布斯
  • 观点

如果数据库支持可编程函数(过程?),请将其与一些临时表一起使用。我不确定Oracle在这方面是否是一个明显的性能赢家,因为Java程序可以使用web服务(获得50列的100000条记录)并调用Oracle来插入(第一组列)或更新(后续组列)直接进入结束表。另外,通过Java代码使用web服务更容易一些。这里没有上升票或下降票——我仍然倾向于在Oracle中尽可能多地做,但我不确定这是否是一个扣篮。“通过Java代码消费web服务更容易一些”-老实说,我从来没有想到海报会尝试实际消费Oracle的web服务。。。我的意思是,我已经看到JAR被添加到Oracle数据库中,但这实际上是最后的手段。我提出的解决方案只是一个简单的程序,保存数据并保留数据库功能的连接。必须从web服务获取数据并将其移动到Oracle。如果“某物”是Java,那么让Java将结果放入最终的表中可能更容易/更快。