Java Spring Hibernate处理500万条记录的方法
我需要处理超过500万到600万个财务记录,其中每个记录都是一笔交易 这是一个Spring、Hibernate解决方案 我可以列出以下四个步骤来说明我的背景Java Spring Hibernate处理500万条记录的方法,java,spring,hibernate,Java,Spring,Hibernate,我需要处理超过500万到600万个财务记录,其中每个记录都是一笔交易 这是一个Spring、Hibernate解决方案 我可以列出以下四个步骤来说明我的背景 读取表中的每条记录。示例(工资) 仅访问特定的两列(主键字段-ID),(薪水-使用RSA加密的值) 解密属于薪资id的薪资字段 使用新的安全密钥再次加密 解决方案需要作为后台进程(可能是spring线程池任务执行器)完成,系统必须24*7运行 每个记录都是一个事务,那么加载要处理的记录的最佳方式是什么? 如果可能,请给我提供一个示例链接 我
对于这样的工作,我会忘记实体框架作为hibernate,而坚持使用数据库端。(如果您在交易过程中没有其他工作要做,例如邮件发送、审核等,而代码仅在服务器端可用) 创建一个执行该作业的存储过程,并在已知的低负载时间内运行一次。在5到30分钟内完成
或者,创建一个一次执行一行的存储过程,并在(数据库)作业中延迟运行它,这样性能就不会受到影响。我将使用Quartz进行计划作业,它很容易与spring集成,过去对我来说效果很好。访问我同意的数据库
您可以使用Hibernate,但必须确保使用 无状态会话,或根据需要定期刷新会话 手册中有解释。我会简单地使用JDBC来实现这一点吉卜赛特
我的做法是:
计划不同的场景和不同的作业,以便在作业失败时可以运行另一个逻辑是否必须使用Hibernate?您应该看看JOOQ。您可以使用Hibernate,但必须确保使用无状态会话,或者按照中的说明定期刷新会话。我只是简单地使用JDBC。如果只有这两列,并且在更新期间不允许锁定整个表,那么如何知道应该使用哪个密钥进行解密?如果我使用Spring batch,我可以在失败的情况下重新尝试particualr记录吗?可以,您可以将作业/步骤配置为单独处理每条记录,然后可以管理运行时异常等故障。这是并行线程处理如何避免两个线程不处理同一行的情况?使用ReadCommitted隔离的事务性,这将防止线程使用脏读。