前言碎语
博客因为域名未被实名被暂停解析,申请实名加审批到域名重新可用,上下折腾导致博客四五天不能访问,这期间也成功了使用spring batch Integration 完成了spring batch分区远程的工程搭建,期间有使用ActiveMQ(JMS)的实现也有基于RabbitMQ(AMQP)的实现,最终选择了基于RabbitMQ的远程主从模式搭建项目,最终项目模型支持一主多从,多主多从,主从混用的使用,极大的提高了批处理的效率,解决了单机批处理的性能瓶颈。为了强化对spring batch关键概念的理解,故有了如下的对spring batch元数据结构的记录描述
概观
Spring Batch 的数据表结构与在Java中的Domain对象非常匹配。例如,JobInstance,JobExecution,JobParameters,和StepExecution 映射到BATCH_JOB_INSTANCE,BATCH_JOB_EXECUTION,BATCH_JOB_EXECUTION_PARAMS,和 BATCH_STEP_EXECUTION,分别。ExecutionContext映射到两者BATCH_JOB_EXECUTION_CONTEXT和BATCH_STEP_EXECUTION_CONTEXT。该JobRepository负责将每个Java对象保存并存储到其正确的表中。本附录详细介绍了元数据表以及创建时的许多设计决策。在查看下面的各种表创建语句时,意识到所使用的数据类型尽可能通用是很重要的。由于各个数据库供应商处理数据类型的方式不同,Spring Batch提供了许多架构作为示例,所有这些架构都有不同的数据类型。下图显示了所有6个表格的ERD模型及其相互间的关系:
图1. Spring批处理元数据ERD
Spring Batch Core JAR文件包含用于为多个数据库平台创建关系表的示例脚本(这些脚本又由作业存储库工厂bean或名称空间等效项自动检测到)。这些脚本可以按原样使用,也可以根据需要使用其他索引和约束进行修改。文件名的格式为schema-*.sql“*”,表示目标数据库平台的简称。脚本在包中org.springframework.batch.core。
该BATCH_JOB_INSTANCE表包含与a相关的所有信息JobInstance,并作为整个层次结构的顶层。以下通用DDL语句用于创建它:
以下列表描述了表中的每一列:
该BATCH_JOB_EXECUTION_PARAMS表包含与该JobParameters对象有关的所有信息 。它包含0个或更多传递给a的键/值对,Job并用作运行作业的参数的记录。对于有助于生成作业标识的每个参数,该IDENTIFYING标志设置为true。请注意,该表已被非规范化。不是为每种类型创建一个单独的表格,而是有一个表格带有指示类型的列,如下所示:
以下列表描述了每列:
请注意,此表没有主键。这是因为框架没有用于一个,因此不需要它。如果需要,您可以添加一个主键,并添加一个数据库生成的密钥,而不会给框架本身带来任何问题。
该BATCH_JOB_EXECUTION表包含与该JobExecution 对象有关的所有信息。每次Job运行a时JobExecution,此表中总是有一个新的和新的一行。以下清单显示了该BATCH_JOB_EXECUTION 表的定义:
以下列表描述了每列:
BATCH_STEP_EXECUTION表包含与该StepExecution 对象相关的所有信息。该表格在很多方面与BATCH_JOB_EXECUTION表格类似,Step每个JobExecution创建的表格总是至少有一个条目。以下清单显示了该BATCH_STEP_EXECUTION表的定义:
以下列表描述了每列:
该BATCH_JOB_EXECUTION_CONTEXT表包含ExecutionContext与a 有关的所有信息 Job。Job ExecutionContext每个 只有一个JobExecution,它包含特定作业执行所需的所有作业级别数据。这些数据通常代表故障发生后必须检索的状态,以便JobInstance罐头能够“从停止的位置开始”。以下清单显示了该BATCH_JOB_EXECUTION_CONTEXT表的定义:
以下列表描述了每列:
该BATCH_STEP_EXECUTION_CONTEXT表包含ExecutionContext与a 有关的所有信息 Step。ExecutionContext每个StepExecution数据只有一个,它包含了需要为特定步骤执行而保留的所有数据。这些数据通常代表故障发生后必须检索的状态,以便JobInstance可以从停止的位置开始。以下清单显示了该BATCH_STEP_EXECUTION_CONTEXT表的定义 :
以下列表描述了每列:
由于每次运行批处理作业时都有多个表中的条目,因此通常为元数据表创建存档策略。这些表格本身旨在显示过去发生的事件的记录,并且通常不会影响任何作业的运行,有几个与重新启动有关的明显例外情况:
如果您在业务处理中使用多字节字符集(例如中文或西里尔语),那么这些字符可能需要在Spring Batch模式中保留。许多用户发现,只需将模式更改为VARCHAR 列长的两倍就足够了。其他人则倾向于配置 JobRepository与max-varchar-length该值的一半VARCHAR列长度。有些用户还报告说,他们利用 NVARCHAR代替VARCHAR他们的模式定义。最好的结果取决于数据库平台以及数据库服务器本地配置的方式。
Spring Batch为几个常见数据库平台的核心jar文件中的元数据表提供了DDL示例。索引声明不包含在该DDL中,因为用户需要索引的方式有很多不同,具体取决于他们的精确平台,本地约定以及作业如何运行的业务要求。下面提供了一些WHERE关于Spring批处理提供的DAO实现将使用哪些列以及它们可能被使用的频率的一些指示,以便单个项目可以对索引编制自己的想法:
表1. SQL语句中的where子句(不包括主键)及其近似使用频率。
默认表名 | 何处条款 | 频率 |
---|---|---|
BATCH_JOB_INSTANCE | JOB_NAME =?和JOB_KEY =? | 每次工作启动 |
BATCH_JOB_EXECUTION | JOB_INSTANCE_ID =? | 每次工作重新开始 |
BATCH_EXECUTION_CONTEXT | EXECUTION_ID =?和KEY_NAME =? | 在提交间隔,又名块 |
BATCH_STEP_EXECUTION | VERSION =? | 在提交间隔,又名块(以及在步骤的开始和结束处) |
BATCH_STEP_EXECUTION | STEP_NAME =?和JOB_EXECUTION_ID =? | 在每个步骤执行之前 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。