处理500万条记录Spring Hibernate的方法

时间:2014-05-11 10:03:00

标签: java spring hibernate

我需要处理超过5到600万条财务记录,其中每条记录都是一笔交易。

这是一个Spring,Hibernate解决方案。

我可以列出以下四个步骤,以使我的背景清晰

  1. 读取表格中的每条记录。示例(薪水)

  2. 仅访问特定的两列(主键字段-ID),(工资 - 使用RSA加密的值)

  3. 解密工资字段属于工资ID。

  4. 使用新的安全密钥再次加密。

    解决方案需要作为后台进程(可能是Spring Thread Pool Task Executor)系统必须完成24 * 7.

    每条记录都是一个事务,那么加载记录进行处理的最佳方法是什么? 如果可能的话,请给我一个示例链接。

    我认为最佳实践是加载10条记录,然后加载10条。如何用spring,hibernate实现这样的解决方案。

3 个答案:

答案 0 :(得分:0)

我会忘记实体框架作为这种工作的hibernate并坚持数据库方面。 (如果您在交易期间没有其他工作要做,即邮件发送,审核等......代码仅在服务器端可用)

创建执行作业的存储过程,并在已知的低负载时间内运行一次。在5到30分钟内完成。

或者,创建一个一行占用一行的存储过程并通过(数据库)作业运行它有一些延迟,这样性能不会受到影响。

答案 1 :(得分:0)

我会使用Quartz进行预定的工作,它很容易与spring集成,并且在过去对我很有用。要访问数据库,我同意

  

你可以使用Hibernate,但你必须确保使用   无国籍会议,或定期刷新会议   在手册中解释。我只是简单地使用JDBC。 - JB Nizet

答案 2 :(得分:0)

我的方法是:

  1. JPA和Hibernate管理我的实体
  2. 让Spring管理会话和交易
  3. 弹簧数据(如果需要)(可选)
  4. 创建服务运行我的逻辑
  5. Spring Batch - 习惯的工作:步骤:自动将服务连接到阅读器和编写器。如果需要,使用处理器运行额外的逻辑。
  6. 配置作业启动器
  7. 安排要执行的启动器
  8. 与Cron同步,例如,您可以每小时或每天24小时30分钟运行任务..
  9. 您可以使用线程池任务执行程序
  10. 规划不同的方案和不同的工作,这样如果工作失败,您可以运行另一个逻辑