2014-09-19 60 views
-3

数据库:的Oracle 11g如何处理大量的数据?使用

操作系统:的Red Hat Linux

技术应用于:的Java & ibatis的

说明:

  • 有2个表格(tableA和tableB)。
  • 表A有超过100000条记录(12-15列)。
  • TableB有超过1000000条记录(40-45列)。
  • 需要使用tableB中的column1检查tableA中的column1,column2,column3和column4值。
  • 如果它在tableB中可用,那么我需要更新tableA中的其他列。

如何做到这一点?

问题:

目前我们已经做到了这一点用java/ibatis的。我们经常遇到java堆空间问题,因为它包含在每个30分钟的crontab中,它将处理数据并使环境变得更慢。

当前的方法:

  • 从表A - 引用没有,用户的姓名,年龄和状态使用下面的查询 选择referenceno,姓名,年龄,状态从表A,其中状态=“失败”,其中牵强。 它几乎返回20lac行,同样存储在arraylist中。

  • 从数组列表,每一行与referenceno,姓名,年龄在表如下从tableB的其中referenveno = tableA.referenceno和名称= tableA.name和年龄= tableA.age和 SELECT COUNT(*)进行比较deleteflag ='N'(如上面提到的tableB几乎有40lac记录)。

  • 如果上面的查询然后返回1,它会随着时间的流逝更新状态表A,

    如果回报率(< 1)失败,言论是没有匹配的发现将更新状态TABLEA。

    如果返回(> 1),它将更新tableA,状态为FAILED,并将备注标记为'找到多个匹配项'。

希望使用shell脚本/ perl可以完成这项工作吗?请建议最好的方法来做到这一点!

+0

你的描述的哪个部分是你坚持的? – 2014-09-19 11:56:35

+0

更新的问题现在有更多的投入,希望你会得到现在的背景!!!!!!!! – Prabhakar 2014-10-10 10:30:05

回答

2

我建议编写PL/SQL存储过程应该是最快的方式 - 那么Oracle数据库不需要发送数据到java应用程序。

您可以通过oracle作业机制安排这样的PL/SQL过程。