Tag: 批处理

用Java处理数百万个数据库记录

我需要编写一个批处理作业,该作业从数据库表中提取行并基于某些条件,写入其他表或使用特定值更新此行。 我们使用spring和jdbc来获取结果集,并使用计划每周运行的独立java程序迭代并处理记录。 我知道这不是正确的方法,但我们必须将其作为临时解决方案。 随着记录增长到数百万,我们最终会出现内存exception,所以我知道这不是最好的方法。 你们中的任何人都可以推荐一种处理这种情况的最佳方法吗? 使用线程并为每个线程获取1000条记录并并行处理它们? (要么) 使用任何其他批处理机制来执行此操作(我知道有弹簧批但从未使用过此) (要么) 还有其他想法吗?

部分失败时的executeBatch行为

我有一个java 1.6应用程序,它使用批量插入来使用jdbc驱动程序在Oracle数据库中插入记录。 正如您在Statement对象上所知,有一个名为executeBatch()的方法,我们将其用于批量更新。 它有一个返回类型的int数组,其中包含每个记录的执行结果。 但它也会在出现错误时抛出BatchUpdateException,我们也可以从中获取结果int数组。 我的问题是我应该期待什么样的错误情况BatchUpdateException和什么时候我应该期望没有抛出exception但是对于某些记录我得失败。 注意:问题特别针对Oracle JDBC。 为了更清楚,我已经看到在执行executeBatch()之后的情况我没有得到BatchUpdateException,但是一些insert语句失败了。 我的问题是关于可能发生的情况? 这是Statement.executeBatch()方法的返回javadoc。 根据这里的一般意见,当一个条目失败时,执行抛出BatchUpdateException然后在哪种情况下我们可以预期返回数组中的某些条目失败。 * @return an array of update counts, with one entry for each command in the * batch. The elements are ordered according to the order in which * the commands were added to the batch. * * * If the value of an […]

Java:批处理整数

我想知道在处理时间方面批处理给定数字的最佳方法是什么。 取项目: 9, 18, 7, 8, 4, 9, 11, 15, 3, 8, (项目1的处理时间为9,项目2的处理时间为18,等等) 如果批处理时间限制设置为20,则可能将项目分组为批次: {1, 3, 5} {2} {4, 6} {8, 9} {7, 10} (第1组是9 + 7 + 4 = 20)等,因此已经制作了5批项目,其中内容<= 20。 理想情况下,我希望它将它们分组为尽可能少的组。 以上情况至少有5组,内容限制为20 … 谢谢

在Oracle JDBC中是否可以批量存储过程调用并检索OUT参数?

我在Oracle 11g数据库中有一个存储过程,如f(a IN,b IN,c OUT)。 我想在批处理模式下从JDBC调用它,然后读取所有OUT变量。 这可能吗? 到目前为止我有这个 CallableStatement statement = connection.prepareCall(“f(?, ?, ?)”); for(Item i : items) { int i = 0; statement.setString(++i, item.getA()); statement.setString(++i, item.getB()); statement.registerOutParameter(++i, Types.NUMERIC); statement.addBatch(); } statement.executeBatch(); int[] answers = ? 谢谢

如何用ANT重命名n个文件? (批量工作)

如何用ANT重命名1..n文件? 我想将xxxx.default.properties所有文件重命名为xxxx.local.properties 。 谢谢。

Spring Batch:如何监控当前正在运行的作业并在jsp页面上显示进度

我想知道如何监视当前正在运行的批处理作业的状态。我的作业基本上处理文件夹有一些默认步骤,所以我想逐步向用户显示进度。我正在使用Tasklets和DB Job Repository。解释一些实现这一目标的示例代码将更有帮助。 谢谢。

什么是最大JDBC批量大小?

我有一个列表,该列表不断增加。 我正在做依赖于列表大小的批量添加。 我忘了将executeBatch的限制放在指定的大小。 计划工作了几个小时。 我现在不想停下来,修理并重新开始。 我的问题是,决定添加批次的大小是什么? 批处理一次执行executeBatch()的最大容量是多少? 多少次我可以使用addBatch而不执行executeBatch() ?

无法在libgdx中批处理多维数据集

我正在尝试开发一种游戏,我在屏幕上渲染多达300个立方体。 在为每个多维数据集创建新的modelInstance时,modelBatch的性能非常糟糕。 据我所知,没有3D批处理将所有立方体批量分配到一个绘图调用。 所以我拼命地尝试以某种方式批量处理它们。 这个问题与此直接相关: LibGDX 3D增加性能 发布的答案成功批量处理所有多维数据集,但是当添加环境以获得某些照明时,看起来立方体缺少侧面或其他东西是错误的。 下图是: 这是我的立方体类(几乎从上面的答案复制) public class Cube { int index; int vertexFloatSize; int posOffset; int norOffset; boolean hasColor; int colOffset; private Vector3 position = new Vector3(); private Matrix4 rotationTransform = new Matrix4().idt(); private Color color = new Color(); public float halfWidth, halfHeight, halfDepth; private boolean transformDirty = false; private […]

Hibernate批处理有什么用?

我是hibernate的新手,我对hibernate批处理有疑问,我读了一些他们说的hibernate批处理教程 Session session = SessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Employee employee = new Employee(…..); session.save(employee); } tx.commit(); session.close(); Hibernate会缓存会话级缓存中的所有持久化对象,最终你的应用程序会在第50,000行左右的某个地方出现OutOfMemoryException。 如果您使用Hibernate批处理,可以解决此问题, Session session = SessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Employee employee = new Employee(…..); session.save(employee); if( i % 50 == […]

目录轮询的最佳实践

我必须进行批处理以自动化业务流程。 我必须定期轮询目录以检测新文件并进行处理。 在处理旧文件时,可以使用新文件。目前,我使用quartz调度程序和线程同步来确保只有一个线程可以处理文件。 部分代码是: 应用程序的context.xml DocumentProcessor ….. public void processDocuments() { LOG.info(Thread.currentThread().getName() + ” attempt to run.”); if (!processing) { synchronized (this) { try { processing = true; LOG.info(Thread.currentThread().getName() + ” is processing”); List xmlDocuments = documentManager.getFileNamesFromFolder(incomingFolderPath); // loop over the files and processed unlock files. for (String xmlDocument : xmlDocuments) { processDocument(xmlDocument); } } […]