一、大数据的存储问题
随着结构化数据量和非结构化数据量的不断增长,以及分析数据来源的多样化,之前的存储系统设计已经无法满足大数据应用的需求,对于大数据的存储,存在以下几个不容忽视的问题
容量 - “大容量”通常是指可达PB级的数据规模
延迟 - 大数据应用不可避免地存在实时性的问题
安全 - 催生出了一些新的、需要重新考虑的安全性问题
成本 - 只有让每一台设备都实现更高的“效率”,才能控制住成本
灵活性 - 大数据存储系统的基础设施规模都很大,为了保证存储系统的灵活性,使其能 够随时扩容及扩展
大数据存储技术发展
可以分为以下四个阶段
人工管理
文件系统
数据库
Google File System、HDFS、HBase etc
二、海量存储的关键技术
大数据处理面临的首要问题是如何有效地存储规模巨大的数据
通常通过数据分片和数据复制来解决这个问题
数据分片与路由
对于海量数据 ,将数据进行切分并分配到各个机器中的过程叫分片(shard/partition),即将不同数据存放在不同节点
数据分片后,找到某条记录的存储位置称为数据路由 (routing)
数据分片与路由的抽象模型如下图所示
数据分片
把数据的各个部分存放在不同的服务器/节点中,每个服务器/节点负责自身数据的读取与写入操作,以此实现横向扩展,这种技术称为分片
如何存放数据 - 可以实现用户从一个逻辑节点(实际多个物理节点的方式)获取 数据,并且不用担心数据的存放位置
如何保证负载平衡 - 即如何把聚合数据均匀地分布在各个节点中,让它们需要 处理的负载量相等
哈希分片
采用哈希函数建立 Key-Partition映射,其只支持点查询,不支持范围查询,主要有Round Robin、虚拟桶 、一致性哈希3种算法
Round Robin - 其俗称哈希取模算法,若有k台机器,分片算法如下:
H (key ) = hash(key) mod k
优点:实现简单
缺点:缺乏灵活性,若有新机器加入,之前所有数据与机器之间的映射关系都被打乱,需要重新计算
虚拟桶 - 在Round Robin 的基础上,虚拟桶算法加入一个“虚拟桶层 ”,形成两级映射
所有记录首先通过哈希函数映射到对应的虚拟桶(多对一映射)。虚拟桶和物理 机之间再有一层映射(同样是多对一)
右图是 Membase 虚拟桶的运行
优点:增加了系统扩展的灵活性
缺点:实现相对麻烦
一致性哈希 - 一致性哈希是分布式哈希表的一种实现算法,将哈希数值空间按照大小组成一个首尾相接的环状序列。
对于一致性哈希可能造成的各个节点负载不均衡的情况,可以采用虚拟节点的方式来解决
在哈希空间可容纳长度为 32 的二进制数值 (m = 32 )空间里,每个机器根据 IP 地址或者端口号经过哈希函数映射到环内
范围分片
范围分片首先将所有记录的主键进行排序,然后在排好序的主键空间里将记录划分成数据分片,每个数据分片存储有序的主键空间片段内的所有记录
支持范围查询即给定记录主键的范围而一次读取多条记录,范围分片既支持点查询,也支持范围查询。
分片可以极大的提高读取性能,但对于频繁写的应用帮助不大,同时分片也可减少故障范围,只有访问故障节点的用户才会受影响,访问其他的节点的用户不会收到故障节点的影响
路由
那么如何根据收到的请求找到储存的值呢,下面介绍三种方法:
直接查找法
如果哈希值落在自身管辖的范围内,则在此节点上查询,否则继续往后找,一直找到节点Nx ,x 是大于等于待查节点值的最小编号
路由表法
直接查找法缺乏效率,为了加快查找速度,可以在每个机器节点配置路由表,路由表存储每个节点到每个除自身节点的距离
一致性哈希路由算法
三、数据复制
将同一份数据放置到多个节点(主从 master-slave方式、对等式per-to-per)的过程称为复制
主从复制
master-slave模式,其中有一个 master节点,存放重要数据,通常负责数据的更新,其余节点都叫slave节点,复制操作就是让slave节点的数据与master节点的数据同步
优点:在频繁读取的情况下有助于提升数据的访问速度,还可以增加多个slave节点进行水平扩展,同时处理更多的读取请求
缺点:数据一致性,如果数据更新没有通知到全部的slave节点,则会导致数据不一致
对等复制
对等复制是指两个节点相互为各自的副本,没有主从的概念
优点:丢失其中一个节点不影响整个数据库的访问
缺点:因为同时接收写入请求,容易出现数据不一致问题。
四、数据一致性
有一个存储系统,其底层是一个复杂的高可用,高可靠的分布式存储系统,一致性模型的定义如下
1:强一致
按照某一顺序串行执行存储对象的读写操作,更新存储对象之后,后续访问总是读到最新值
2:弱一致性
更新存储对象之后,后续访问可能读不到最新值,从更新成功这一时刻算起,到所有访问者都能读到修改后的对象为止,这段时间称为不一致性窗口,在该窗口内访问存储时无法保证一致性
3:最终一致性
最终一致性是弱一致性的特例,存储系统保证所有访问最终读到对象的最新值
创作不易 觉得有帮助请点赞关注收藏~~~