spring-batch - 使用弹簧批处理应用流口水规则
问题描述
我们有这样的场景,我必须在应用业务规则后从一个数据库获取数据并将数据更新到另一个数据库。
我想使用 spring batch+drools+hibernate。
我们可以批量应用规则,因为我们一次有数百万条记录吗?
解决方案
我不是流口水专家,我只是想提供一些有关 Spring Batch 的背景信息。
Spring Batch 是一个Read -> Process -> Write框架,我们对 drools 所做的与我们在Spring Batch 的Process步骤中所做的相同,即我们将读取项目转换为ItemProcessor
.
Spring Batch 如何帮助您处理大量项目是通过实现面向块的处理,即我们一次读取 N 个项目,在处理器中逐个转换这些项目,然后在写入器中写入大量项目 - 这样我们基本上减少了数据库调用的数量。
如果您的数据可以根据某些标准进行分区,则通过分区等实现并行性可以进一步提高性能。
所以我们批量读取项目,逐个转换然后批量写入目标数据库,我不认为休眠是在写入步骤进行批量更新/插入的好工具——我会使用普通的 JDBC。
您的口水在转换步骤中出现,这将是您的自定义代码,其性能与 Spring Batch 无关,即您如何初始化会话、预编译规则等。您必须以这样一种方式插入此代码,即您不会每次都初始化 drools 会话等,但这应该是一次活动。
推荐阅读
- r - r 中值的百分比变化
- javascript - 春季启动时的多部分文件数组
- python - Python matplotlib:显示后图形无法更新
- excel - 将命名范围值存储为变量
- python - vscode集成终端中的阿拉伯文本
- django - 通过 Axios 将数据发布到 Django Rest Framework 服务器时出错,错误代码 500
- java - 在 n 层服务层中使用 Spring Boot 的 JUnit
- ruby-on-rails - Rails 测试失败无法连接到服务器:没有这样的文件或目录 (PG::ConnectionBad)
- prolog - dcg parsing in random order
- python - 使用 str.replace 将小写字母更改为大写字母的问题,反之亦然