如何处理大量数据?

时间:2014-09-19 10:08:27

标签: java perl shell oracle11g ibatis

使用的数据库: Oracle 11g

操作系统: Red Hat linux

使用的技术: Java& ibatis的

说明:

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

怎么做?

问题:

目前我们使用java / Ibatis完成了这项工作。我们经常遇到java堆空间问题,因为它包含在crontab中,每隔30分钟它会处理数据并使环境变慢。

当前方法:

    来自表A的
  • - 使用以下查询获取的参考号,用户名,年龄和状态 从tableA中选择referenceno,name,age,status,status =' FAILED'。 它几乎返回20lac行,并且存储在arraylist中。

  • 来自arraylist的
  • ,每行与referenceno,name,age在表格中进行比较如下 从tableB中选择count(*),其中referenveno = tableA.referenceno和name = tableA.name和age = tableA.age和deleteflag =' N&#39 ;.(如上所述,tableB有近40lac记录)。

  • 如果上面的查询返回1,那么它将更新tableA,状态为PASSED,

    如果返回(< 1),它将更新tableA,状态为FAILED,并且备注为未找到匹配。

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

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

1 个答案:

答案 0 :(得分:2)

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

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