数据库分片

取模分片

id mod k
k为主机数量

哈希取模分片

哈希分片

范围分片

使用连续范围分区的方法进行数据分片,需要我们保存一份映射关系表,标明哪一段key值对应存在哪台机器上。和一致性hash类似,连续范围分区会把key值按连续的范围分段,每段数据会被指定保存在某个节点上,然后会被冗余备份到其它的节点。和一致性hash不同的是,连续范围分区使得key值上相邻的两个数据在存储上也基本上是在同一个数据段。这样数据路由表只需记录某段数据的开始和结束点[start,end]就可以了。 通过动态调整数据段到机器结点的映射关系,可以更精确的平衡各节点机器负载。如果某个区段的数据负载比较大,那么负载控制器就可以通过缩短其所在节点负责的数据段,或者直接减少其负责的数据分片数目。通过添加这样一个监控和路由模块,使我们能够更好的对数据节点进行负载均衡。

BigTable的处理方式

Google BigTable 论文中描述了一种范围分区方式,它将数据切分成一个个的tablet数据块。每个tablet保存一定数量的键值对。然后每个Tablet 服务器会存储多个tablet块,具体每个Tablet服务器保存的tablet数据块数,则是由服务器压力来决定的。 每个tablet大概100-200MB大。如果tablet的尺寸变小,那么两个tablet可能会合并成一个tablet,同样的如果一个tablet过大,它也会被分裂成两个tablet,以保持每个tablet的大小在一定范围内。在整个系统中有一个master机器,会根据tablet的大小、负载情况以及机器的负载能力等因素动态地调整tablet在各个机器上的分布。

master服务器会把 tablet 的归属关系存在元数据表里。当数据量非常大时,这个元数据表实际也会变得非常大,所以归属关系表实际上也是被切分成一个个的tablet保存在tablet服务器中的。查询数据的时候就需要二次查询。

故障处理

在BigTable中,master机器是一个故障单点,不过系统可以容忍短时间的master故障。另一方面,如果tablet 服务器故障,那么master可以把对其上tablet的所有请求分配到其它机器节点。 为了监测和处理节点故障,BigTable实现了一个叫Chubby的模块,Chubby是一个分布式的锁系统,用于管理集群成员及检测各成员是否存活。ZooKeeper是Chubby的一个开源实现,有很多基于 Hadoop 的项目都使用它来进行二级master和tablet节点的调度。

基于范围分片的NoSQL项目

HBase 借鉴了BigTable的分层理论来实现范围分区策略。tablet相关的数据存在HDFS里。HDFS 会处理数据的冗余备份,并负责保证各备份的一致性。而像处理数据请求,修改存储结构或者执行tablet的分裂和合并这种事,是具体的tablet服务器来负责的。 MongoDB也用了类似于BigTable的方案来实现范围分区。他用几台配置机器组成集群来管理数据在节点上的分布。这几台机器保存着一样的配置信息,他们采用 two-phase commit 协议来保证数据的一致性。这些配置节点实际上同时扮演了BigTable中的master的路由角色,及Chubby 的高可用性调度器的角色。而MongoDB具体的数据存储节点是通过其Replica Sets方案来实现数据冗余备份的。 Cassandra 提供了一个有序的分区表,使你可以快速对数据进行范围查询。Cassandra也使用了一致性hash算法进行数据分配,但是不同的是,它不是直接按单条数据进行hash,而是对一段范围内的数据进行hash,也就是说20号数据和21号数据基本上会被分配在同一台机器节点上。 Twitter的Gizzard框架也是通过使用范围分区来管理数据在多个节点间的备份与分配。

融合分片

哈希分片以及范围分片结合起来使用

地理位置分片

一般用于NewSQL数据库,提供全球范围内分布数据的能力。数据被映射到特定的分片,分片又被映射到特定区域中的节点,然后在这些区域内,使用哈希或者范围分片算法进行分片。

Apache ShardingSphere 内置分片

https://blog.csdn.net/gutf0827/article/details/122577701
https://blog.csdn.net/Kiven_ch/article/details/119087048
https://www.wenjiangs.com/doc/0hwbxwzzfu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值