大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。今天和大家一起学习分布式技术😊
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 24 天,点击查看活动详情
垂直分片
数据的垂直分片与混合分片,相比水平分片来说,更好地满足数据分析场景
垂直分片策略
水平分片策略是将整个数据集的条数来做划分的对象。垂直分片的策略是将数据 Schema 的字段集个数当做划分的对象,每个分片负责处理一个或者多个字段的全部数据。如果垂直分片的处理方式是一个字段一个分片,这就会等价于列式存储
大数据分析场景的数据处理有以下特点:
- 宽表存储,按列读取
- 读多写少
- 数据量大
- 查询无规律,不能索引覆盖
列式存储对于大数据分析的场景,是如何优化处理的:
-
对于宽表存储,按列读取的场景,行式存储的话虽然可以顺序读取整个宽表所有列的数据,但是会导致读取的数据量放大很多倍。如果是按照列式存储的话,就可以保证数据量变少,但是不能顺序读取只能随机读取数据了
-
读多写少的场景,会减少列式存储对写性能的影响。因为一般数据写入存储系统都是行式写入的,而列式存储会导致一行数据的写入操作,变成多个字段的写入操作。所以读多写少适合列式存储
-
数据量大,并且会持续增加。这就要求存储系统可以高效的压缩,降低存储的容量。列式存储在数据重复度比较高的情况,可以对数据采用字典重新编码,来减少数据的大小
- 列式存储可以通过按列顺序存储、按需读取和高效压缩,使得按列读取的性能大大提高
混合分片策略
在字段数量很少的情况,完全依赖垂直分片策略来解决数据的水平扩展是不现实的。所以可以将垂直分片和水平分片策略结合起来解决问题
组合策略可以分为垂直水平分片策略和水平垂直分片策略
水平垂直分片策略更像是,水平分片策略和垂直分片策略的结合体,它对于整个数据集来说,一般是主键先利用基于关键词划分的水平分片策略,将数据集成不同的分片,然后对一个分片内的数据再进行垂直分片。这样带来的好处是在一个水平分片内,依然按列式存储来存储数据,所以它有列式存储按列读取数据,高效和压缩比高的优点。在按行写入和读取多列的时候,都在一个数据分片上,大大地减少了网络 IO ,要知道在大规模的数据处理系统中,网络 IO 有可能是整个系统的瓶颈,同时,也能将一些分布式事务变成本地事务,提升系统的处理效率。总体来说,水平垂直分片策略不仅保留了列式存储的优点,而且将多列操作控制在一个数据分片上,减少了网络 IO 和分布式事务,是混合分片策略常见的方式,Google 的 Dremel 数据库就采用了这种分片策略
此文章为2月Day20学习笔记,内容来源于极客时间《深入浅出分布式技术原理》