哪个最适合批量 XML 数据处理? Spring 批处理还是 ETL kettle pentaho?

Which is best for bulk XML data processing? Spring Batch or ETL kettle pentaho?

我想处理大量 XML 数据并将其保存到数据库中。这是最好的选择。 Spring 批量水壶 pentaho? 我有一些检查站。

  1. 当模式已知时,该工具很好用
  2. 支持并行执行、多会话和错误日志
  3. 更快、更少内存和更少 CPU 利用率
  4. 同时支持插入和更新
  5. 目标表的外键引用,删除约束并在数据加载后添加
  6. 消除重复
  7. 块或批量加载支持
  8. 无头执行(计划和启动无图形用户界面)
  9. 支持多种输入格式
  10. 作为可插入组件支持自定义数据转换
  11. 未来执行的事务控制、错误处理和日志记录
  12. 检查作业状态,监控
  13. 集成测试、健全性测试
  14. 可扩展,如何并行加载多个节点
  15. Jobs 崩溃时重启,失败后自动重启
  16. 执行期间的跟踪状态和统计数据
  17. 能够通过 Web 或 Rest 界面启动

我将尝试使用 Spring 批处理功能来解决您的问题:

  1. 当架构已知时,该工具很好用

Spring批次就是这种情况。您将能够使用需要带注释的 bean(已知模式)的 StaxEventItemReader

  1. 支持并行执行、多会话和错误日志

Spring批处理支持并行执行和错误记录。我不确定您所说的多个会话是什么意思。 Here are some info about spring batch scalability.

  1. 更快,内存更少,利用率更低CPU

Spring 批处理性能在很大程度上取决于您将如何使用它。尽管它可能不是最快或更高效的,但它已在全球许多生产环境中使用。

  1. 同时支持插入和更新

Spring 批处理数据库编写器支持具有此类操作的通用 DBMS (JdcbBatchItemWriter, HibernateItemWriter...)

  1. 目标表的外键引用,删除约束并在数据加载后添加

我认为这需要一些手动实施,但我不确定,因为我今天还没有满足要求。

  1. 消除重复

这将在您的 ItemProcessor 中完成。这是一个例子:

  1. 块或批量加载支持

您可以使用 Spring 批量配置编写器的 commit-interval 和回滚操作。

  1. headless 执行(计划和启动无图形用户界面)

Spring 可以使用 CommandLineJobRunner 或任何其他方式使用 JobLauncher 开始批处理(然后需要一些手动实施)

  1. 支持多种输入格式

Spring批处理可以读取任何类型的平面文件(FlatFileItemReader)、xml文件(StaxEventItemReader)、队列(JmsItemReader)或数据库(JdbcCursorItemReader).

  1. 支持自定义数据转换为可插拔组件

通过ItemProcessor实现数据转换。有开箱即用的实现,但大多数情况下您必须编写自己的实现来应用您的自定义逻辑。至于可插拔组件,我不太清楚你的意思。

  1. 未来执行的事务控制、错误处理和日志记录

Spring批处理有完整的Retry机制和Restartability。您可以阅读更多 here and here.

  1. 检查作业状态,监控

Spring Batch 允许您配置有关作业状态元数据的存储位置(数据库、文件、RAM...)。您将能够读取这些数据。还有一个名为 spring-batch-admin 的第二个项目,它是一个用于监视和控制的 GUI。阅读更多 here.

  1. 集成测试、完整性测试

无法回答。

  1. 可扩展,如何并行加载多个节点

参见 11。此外 Spring 批处理可以与 Spring-XD 集成。

  1. 作业崩溃时重启,失败后自动重启

参见 11。

  1. 执行期间的跟踪状态和统计数据

参见 12。

  1. 能够通过 Web 或 Rest 界面启动

Spring 批处理可以与 Spring-Boot 集成来满足这些需求。


希望我回答了您的一些问题。