[Spring Cloud Task]5 Spring Batch数据分片探究

概述

本文是Spring Cloud Task系列的第五篇文章,如果你尚未使用过Spring Cloud Task,请 移步spring cloud task1 简介与示例
本文主要讲述的是Spring的另一个核心子项目 Spring Batch中的数据分片的设计,数据分片是分而治之的编程思想提现。分片的意义是利用多核cpu并行处理的优势,将数据量大且执行时间长的任务,依照一定规则,拆分成多个平等的可同时执行的任务。通过分而治之的思想,来减少批处理程序的整体运行时间,加快应用的执行效率。

详情

数据分片具体的表现是将数据处理应用部署多个版本并行运行。其目标是通过并行运行,减少需要极长时间才能完成的批处理任务的整体执行时间。数据分片能够显著减少批处理任务执行时间,但也并非银弹。只有在业务所用到的资源文件支持拆分,或业务表支持同时操作完全不同的数据集时,才可以考虑使用数据分片。

设计分片任务时应该注意,首先我们应该准守单一智能原则,一个分片任务应该只处理被分配分配给它的数据集。其次分片任务应用的架构最好跟数据库的分区设计保持一致(这里指的数据库分区不只是物理数据库分区,逻辑的垂直分表也应该被看做分区)。图1展示了典型分片处理应用的逻辑架构。

分片处理应用的逻辑架构

通过分析这个架构图,一个可分片的批处理应用应满足可以使用户自定义配置且可以动态的决定启用多少个分片任务。如何去让应用自动配置呢?举个例子,我们可以取输入文件的文件大小或者是数据纪录条数作为参数来动态控制分片任务的数量。

分片方法

分片应用的分片方法取决于其面对的业务场景,下面介绍几个常用的分片方法

1. 固定分片法

将数据集平均分配给固定数量的分片任务中(例如一共有10个分片任务,每个分配任务将得到1/10的数据集),每个分片任务都是批处理任务的一个部署实例。

使用这种分片方式需要设计一个预处理程序来切分总数据集。预处理程序可以计算出每个分片任务要处理的数据的上下边界,并作为输入参数传递给分片任务,这样分片任务就能做到处理自己的数据。

不过预处理任务需要计算和确定每个批处理任务需要处理的数据集的边界,所以其本身可能会有很大的性能开销。

2. 关键列分片法

关键列区分发是通过某个特殊的列的值来分割数据集,这种分配方式会为每一个域值分配一个批处理应用实例(例如通过地区编号区分)。一般情况以下两种方案进行关键列区分:

  • 通过表分区来为批处理实例分配输入数据集
  • 通过区间数据集来为批处理实例分配数据集(如0000-0999,1000-1999等)

关于方法一,该列一般是枚举值。注意在添加新枚举选项时,需要重新配置批处理程序需要处理的关键字。

关于方法二,字段区间的特性使方法二能够覆盖到所有的字段可能值,但正因一个批处理实例所分配到的数据是完全分散于该列的各个区间值上的,这有可能造成在0000-0999区间上有大量数据,而1000-1999上仅分布极小的数据集。所以在采用方法二时,应当先考虑清楚数据的分布区间问题。

上面两种方法中批处理应用实例的数量无法根据数据分布的特性进行动态调整,我们还需要根据实际业务需求寻找最佳方案。

3. 视图分片法

视图分片法是完全基于数据库的,借助关系型数据库的视图的概念,为每个批处理应用实例分配一个专有的视图。原理就是利用数据库的分组group语句,来为批处理应用隔离数据。

这个方法需要批处理应用实例自行配置自己所需处理的视图(而不是直接使用主表),并且在新增group的值时,还需要配置新的视图。这种方法完全没有动态扩展能力,每新增一个视图的同时就需要新配置一个批处理应用实例。

4. 标识分片法

标识分片法是在数据库表中新增一个数据处理标识的列来作为指示器。预处理数据阶段,所有指示器的值都是待处理状态。数据读取阶段,只读取指示器为未处理的数据行。一旦读取到数据后,立刻将数据锁定。当数据处理完成后,指示器被标记为完成或错误状态。

标识分片法的指示器也可以防止批处理应用多次执行时会重复处理数据。不过标记分片法I/O占用很多,所以它更适合用在以写操作为主的应用上,这样对性能的影响才能降到最低。

5. 临时文件法

将表中的数据导出到文件,文件可以采用多种标记进行分割并作为批处理应用实例的输入数据。

将表提取到文件并分割数据在一定程度上能够降低任务分片的复杂度,如此只需要修改文件分割脚本便可以实现分片的动态配置。

6. 哈希法

哈希法指的是通过数据库表中的哈希列来检索数据,哈希列作为一个指示器,来计算每个数据行应该被哪一个批处理应用实例来处理。

这种方法在检索数据时使用 WHERE 子句来选取带有特定指示器的所有行,且每次插入数据时,都应该为标识器设置一个值来决定日后分配给哪一个批处理实例来处理。

随着业务的增长,批处理数据源的增多,为提高整体效率,往往需要在多个批处理实例间重新分配要处理的数据。哈希法关注的是哈希列的值与应用实例数量的求余,在实现上它需要一个额外的应用来进行批处理用于实例的注册和待处理哈希分配。

关于

示例源码

Spring Cloud Task learning 的 task-demo-with-datasource 子项目

后记

Spring Cloud Task是一个优秀的项目,但是我找遍网络,也难以找出系统的、准确的中文相关文档。本系列文章以保证对Spring Cloud Task相关概念和设计理解的正确性为标准,尽量采用通俗易懂的语言,希望能给各位带来一些便捷。

本文内容主要是对 Spring Cloud Task 1.2.2-RELEASE 官方文档的翻译,不过作者水平有限,有不尽然的地方敬请指出。本项目和文档中所用的内容仅供学习和研究之用,转载或引用时请指明出处。如果你对文档有疑问或问题,请在项目中给我留言或发email到
weiwei02@vip.qq.com 我的github:
https://github.com/weiwei02/ 我相信技术能够改变世界 。

链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容