我想处理大量 XML 数据并将其保存到数据库中。这是最好的选择。 Spring 批水壶pentaho? 我有一些检查点。
- 当模式已知时,工具就很好用
- 支持并行执行、多个 session 和错误日志
- 速度更快、内存更少、CPU 利用率更低
- 支持插入和更新
- 目标表的外键引用,删除约束并在数据加载后添加
- 消除重复
- 支持 block 或批量加载
- headless 执行(无 GUI 用于计划和启动)
- 支持多种输入格式
- 支持自定义数据转换作为可插入组件
- 事务控制、错误处理和日志记录以供将来执行
- 检查作业状态、监控
- 集成测试、健全性测试
- 可扩展,如何并行加载多个节点
- 作业崩溃时重新启动,失败后自动重启
- 执行期间跟踪状态和统计数据
- 能够通过网络或 Rest 界面启动
最佳答案
我将尝试使用 Spring Batch 功能来解决您的观点:
- 当模式已知时,工具就很好用
Spring 批处理就是这种情况。您将能够使用需要带注释的 bean(已知架构)的 StaxEventItemReader
。
- 支持并行执行、多个 session 和错误日志
Spring批处理支持并行执行和错误日志记录。我不确定你所说的多次 session 是什么意思。 Here are some info about spring batch scalability .
- 速度更快、内存更少、CPU 利用率更低
Spring 批处理性能在很大程度上取决于您将如何使用它。尽管它可能不是最快或更高效的,但它已在世界各地的许多生产环境中使用。
- 支持插入和更新
Spring Batch 数据库编写器支持具有此类操作的常见 DBMS(JdcbBatchItemWriter
、HibernateItemWriter
...)
- 目标表的外键引用,删除约束并在数据加载后添加
我认为这需要一些手动实现,但我不确定,因为到目前为止我还没有满足要求。
- 消除重复
这将在您的ItemProcessor
中完成。这是一个例子:processing batch of records using spring batch before writing to DB
- 支持 block 或批量加载
您可以使用 Spring Batch 配置编写器的commit-interval
和回滚操作。
- headless 执行(无 GUI 用于计划和启动)
Spring Batch 可以使用 CommandLineJobRunner
启动,也可以使用 JobLauncher
以任何其他方式启动(需要一些手动实现)
- 支持多种输入格式
Spring Batch 可以读取任何类型的平面文件 (FlatFileItemReader
)、xml 文件 (StaxEventItemReader
)、队列 (JmsItemReader
) 或数据库 ( JdbcCursorItemReader
)。
- 支持自定义数据转换作为可插入组件
数据转换是通过ItemProcessor
实现的。有开箱即用的实现,但大多数情况下您必须编写自己的实现来应用自定义逻辑。至于可插拔组件,我不确定你的意思。
- 事务控制、错误处理和日志记录以供将来执行
Spring Batch 具有完整的重试
机制和可重启性
。您可以阅读更多here和 here .
- 检查作业状态、监控
Spring Batch 允许您配置存储有关作业状态的元数据(数据库、文件、RAM...)的位置。您将能够读取这些数据。还有第二个项目名为 spring-batch-admin ,它是一个用于监视和控制的 GUI。了解更多 here .
- 集成测试、健全性测试
无法回答。
- 可扩展,如何并行加载多个节点
参见 11。 Spring Batch 还可以与 Spring-XD 集成.
- 作业崩溃时重新启动,失败后自动重启
参见 11。
- 执行期间跟踪状态和统计数据
参见 12。
- 能够通过网络或 Rest 界面启动
Spring Batch 可以与 Spring-Boot 集成来满足这些需求。
我希望我回答了您的一些疑虑。
关于spring - 哪个最适合批量 XML 数据处理? Spring Batch 还是 ETL 水壶 pentaho?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935152/