论数据分片技术及其应用

数据分片就是按照一定的规则,将数据集划分成相互独立正交的数据子集。然后将数据子集分布到不同的节点上,通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。

请围绕“论数据分片技术及其应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与管理和开发软件的项目以及承担的工作

2.Hash分片、一致性Hash分片和按照数据范围分片是三种常用的数据分片方式

3.具体阐述你参与管理和开发的项目,且采用了哪些分片方式,并且具体说明其实现过程和应用效果。

常用的关系型数据库都存在性能瓶颈,即在数据达到一定的量级之后,数据库的性能会显著下降,数据库的读写操作都会随之受到影响。所以就需要对数据库进行优化处理。比如缓存技术,读写分离技术和数据分片技术都可以起到提高性能,缓解单个物理节点的压力。

缓存

工作中比较常用的如Redis用来缓解数据库的压力。将热点数据预热到缓冲中,避免大量的访问压力直接给到数据库上面,给数据库减轻负担。

读写分离

配置实现主从数据库,将请求分为读/写两种类型,读请求走从库(slave),写类型请求走主库(master)。比如MySQL自身提供的主从数据同步方案。主从库之存在较低(可接受范围)的数据同步延迟。

数据分片

如果单表/单库存在数据保存的性能问题,可使用分片将保存的数据分散到多个库表中,其中分为水平分片和垂直分片。

水平分片

统一类型的数据,分别放到不同的库/表中。每个分片包含了整体的数据集合的一部分。

虽然可减轻单节点的访问压力,又迎来了分布式事务的问题。

垂直分片

存在一个宽表(即包含过多字段的表),其中某几个字段属于热点数据,客户端请求某一条记录,大部分情况下都是要获取这条记录中的某几个热点字段。这个时候,将这张表拆分为主表和从表两张表,热点数据单独成表(从表),这样数据访问/更新会避免在宽表上的大量操作。

提前合计好对应的主从表。按照不同的业务模块拆分数据库,这样可以适当的减少单个服务器的压力。

三种数据分片方式:hash方式,一致性哈希(consistent hash),按照数据范围(range based)

哈希分片

概念:按照数据的某一特征来计算哈希值,并将哈希值与系统中的节点建立映射关系。

优点:简单易于实现

缺点:很难解决数据不均衡问题,再增加一个机器,每个机器对应的一个hash值的区域就发生改变。

补充:假设这里面是按员工的薪水进行计算hash值,实际人群中,可能处于平均薪水10k 左右的人比较多,高薪水的人比较少这导致某些机器上的数据很大,导致大量的数据集中到一个物理节点上。

一致性哈希

概念:一致性hash相当与一个环。所有的数据都在这个环上,每个机器相当于环的一截,相比于上述的hash方式,一致性hash方式需要维护的元数据额外包含了节点在环上的位置。

优点:简单易于实现,在增删数据的时候只会影响到hash环上相邻的节点,不会发生大规模的数据迁移。

缺点:增加节点的时候,只能分摊一个已存在节点的压力

补充:

在实际工程中,一般会引入虚拟节点(virtual node)的概念。即不是将物理节点映射在hash换上,而是将虚拟节点映射到hash环上。虚拟节点的数目远大于物理节点,因此一个物理节点需要负责多个虚拟节点的真实存储。操作数据的时候,先通过hash环找到对应的虚拟节点,再通过虚拟节点与物理节点的映射关系找到对应的物理节点。

按照数据范围

概念:就是按照关键值划分成不同的区间,每个物理节点负责一个或者多个区间。其实这种方式跟一致性hash有点像,可以理解为物理节点在hash环上的位置是动态变化的。

优点:

当达到这个阈值之后就会分裂成两个块。这样做的目的在于当有节点加入的时候,可以快速达到均衡的目的

缺点:

在数据可修改的情况下,如果块进行分裂,那么元数据中的区间信息也需要同步修改。

补充:

range based这种数据分片方式应用非常广泛,比如MongoDB, PostgreSQL, HDFS

比较

如果一个节点负责的数据只有一个区间,range based与没有虚拟节点概念的一致性hash很类似;如果一个节点负责多个区间,range based与有虚拟节点概念的一致性hash很类似。

分片方式 映射难度 元数据 节点增删 数据动态均衡

哈希方式 简单 非常简单,几乎不用修改 需要迁移的数据比较多 不支持

一致性哈希 简单 比较简单,取决于节点规模,几乎不用修改 增删节点的时候只影响hash环上相邻节点,但不能使所有节点都参与数据迁移过程 不支持

一致性哈希(虚拟节点) 中等 稍微复杂一些,主要取决于虚拟节点规模,很少修改 需要迁移的数据比较少,且所有节点都能贡献部分数据 弱支持(修改虚拟节点与物理节点映射关系)

范围分片 较为复杂 取决于每个块的大小,一般来说规模较大,且修改频率较高 需要迁移的数据比较少,且所有节点都能贡献部分数据 支持,且比较容易

数据分片需要按照一定的规则,不同的分布式应用有不同的规则,但都遵循同样的原则:按照最主要、最频繁使用的访问方式来分片。

具体如何划分原始数据集

当原问题的规模变大的时候,能否通过增加节点来动态适应

当某个节点故障的时候,能否将该节点上的任务均衡的分摊到其他节点

对于可修改的数据(比如数据库数据),如果某节点数据量变大,能否以及如何将部分数据迁移到其他负载较小的节点,及达到动态均衡的效果

元数据的管理(即数据与物理节点的对应关系)规模

元数据更新的频率以及复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值