下面是一些关键的指导原则,可以在构批量处理解决方案可以参考:
- 请记住,通常皮脸处理体系结构将会影响在线应用的体系结构,同时反过来也是一样的。在你为批量任务和在线应用进行设计架构和环境的时候请尽可能的使用公共的模块。
- 越简单越好,尽量在一个单独的批量应用中构建简单的批量处理,并避免复杂的逻辑结构。
- 尽量的保持存储的数据和进程存储在同一个地方(换句话说就是尽量将数据保存到你程序运行的地方)。
- 最小化系统资源的使用,尤其针对 I/O。尽量在内存中执行尽可能多的操作。
- 检查应用的 I/O(分析 SQL 语句)来避免不必要的的物理 I/O 使用。特别是以下四个常见的缺陷(flaws)需要避免:
- 在数据可以只读一次就可以缓存起来的情况下,针对每一个事务都来读取数据
- 多次读取/查询同一事务中已经读取过的数据
- 产生不必要的表格或者索引扫描
- 在 SQL 查询中不指定 WHERE 查询的值。
- 在批量运行的时候不要将一件事重复 2 次。例如,如果你需要针对你需要报表的数据汇总,请在处理每一条记录时使用增量来存储,尽可能不要再去遍历一次同样的数据。
- 为批量进程在开始的时候就分配足够的内存,以避免在运行的时候再次分配内存。
- 总是将数据完整性假定为最坏情况。对数据进行适当的检查和数据校验以保持数据完整性(integrity)。
- 可能的话,请实现内部校验(checksums )。例如,针对文本文件,应该有一条结尾记录,这个记录将会说明文件中的总记录数和关键字段的集合(aggregate)。
- 尽可能早地在模拟生产环境下使用真实的数据量,以便于进行计划和执行压力测试。
- 在大数据量的批量中,数据备份可能会非常复杂和充满挑战,尤其是你的系统要求不间断(24 - 7)运行的系统。数据库备份通常在设计时就考虑好了,但是文件备份也应该提升到同样的重要程度。如果系统依赖于文本文件,文件备份程序不仅要正确设置和形成文档,还要定期进行测试。
https://www.cwiki.us/display/SpringBatchZH/General+Batch+Principles+and+Guidelines