gpt4 book ai didi

java - 处理许多记录的一般事务问题

转载 作者:行者123 更新时间:2023-12-01 05:48:45 24 4
gpt4 key购买 nike

我正在使用一个对我来说很新的代码库,它使用 iBatis。我需要更新或添加现有的表,可能涉及20,000+条记录。该进程每天运行一次,并在半夜运行。

我正在从网络服务调用中获取数据。我计划获取数据,然后为每条记录填充一个模型类型对象,并将每个模型类型对象传递给某种方法,该方法将读取对象中的数据,并将数据更新/插入到表中。

示例:

ArrayList records= new ArrayList();
Foo foo= new Foo();
foo.setFirstName("Homer");
foo.setLastName("Simpson");
records.add(foo);
//make more Foo objects, and put in ArrayList.

updateOrInsert(records); //this method then iterates over the list and calls some method that does the updating/inserting

我的主要问题是如何将所有更新/插入作为事务处理。如果系统在读取用于更新/插入表的所有记录之前出现故障,我需要知道,这样我可能会返回到 Web 服务调用,并在系统正常时重试。

我使用的是Java 1.4,数据库是Oracle。

最佳答案

我强烈建议您考虑使用 Spring Batch - http://static.springsource.org/spring-batch/

该框架提供了批处理所需的许多基本功能 - 错误报告、事务管理、多线程、扩展、输入验证。

该框架设计得非常好并且非常易于使用。

您列出的方法可能性能不佳,因为您正在等待读取所有对象,将它们全部存储在内存中,然后插入数据库。

您可能需要考虑按如下方式设计流程:

  1. 创建一个能够存储 200 个对象的缓存
  2. 调用网络服务来获取数据
  3. 创建对象的实例,验证数据并将其存储在对象的字段中
  4. 将对象添加到缓存中。
  5. 当缓存满时,将缓存中的对象批量提交到数据库
  6. 继续第 1 步

SpringBatch 将允许您执行批量提交、控制批量提交的大小、在读取输入时执行错误处理 - 在您的情况下重试请求、在将数据写入数据库时​​执行错误处理。

看一下。

关于java - 处理许多记录的一般事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com