大数据架构之数据存储

持久化存储

关键概念: 文件系统,数据库系统
文件系统中,大量文件没有很好组织,缺乏对象之间关键,读取效率低,因此有了数据库。

单台计算机无法满足数据存储和处理需求,需要集群化方案,如何高效读取分布式计算机文件,高效执行分布式数据库的SQL查询,就有了NOSQL。知名分布式文件系统HDFS,分布式非关系型(非结构化)数据库Hbase和MongoDB。

分布式文件系统

2003年,Google发布论文GFS,启发Apache Nutch开发了HDFS。2004年,Google 又发布了论文《MapReduce: Simplified Data Processing on Large Clusters》,Doug Cutting等人实现计算框架MapReduce ,并与HDFS结合来更好的支持该框架。2006年项目从Butch搜索引擎中独立出来,成为了现在的Hadoop。

GFS隐藏了底层的负载均衡,切片备份等细节,使复杂性透明化,并提供统一的文件系统接口。其成本低,容错高,高吞吐,适合超大数据集应用场景。

HDFS原理:
1、横向扩展,增加“数据节点”就能增加容量。
2、增加协调部门,“命名节点”维护元数据,负责文件系统的命名空间,控制外部访问,将数据块印射到数据节点。还会备份元数据从命名节点,它只与命名节点通信。
3、数据库在多个数据节点备份。

弱点:
1.不适合实时数据访问。
2.无法高效存储小文件,太多小文件会降低命名节点检索效率,降低系统处理速度。
3.不支持多用户写入。
4.不支持文件任意位置修改,只能在文件末尾追加新数据。

分布式数据库

Google发布论文《Bigtable: A Distributed Storage System for Structured Data》。

HBase

Hbase在HDFS基础上提供了Bigtable的能力; 并且基于的模式进行存储。

HBase的数据模型:
表格

列族
列限定符
单元
版本

HBase体系结构:
HMaster
HRegion
HRegion服务器

HBase的列存储设计非常方便扩展,可以修改列族定义、增加列族或列限定符,所以被成为“宽表”。

宽表模式优点:
节省关系数据库连接操作和存储空间。
可将不同Schema模式的数据混合,即异构数据源的统一和集成。

MongoDB

面向集合,数据分组存储在数据集,数据集被称为集合,每个集合在数据库有唯一标识,可以包含无数文档。

与HBase区别:
1.数据直接存储在文件系统上,而非HDFS上。其也有大文件存储概念GridFS,由MongoDB自身实现。
2.数据模型以文档为单位,支持多种复杂结构。文档中字段或属性不限定特定类型。
3.单个文档不再切分和分布式存储。

非持久化存储

关键字:缓存和散列
散列:数据的散列值作为键,待写入的数据作为值,进行key-value配对存储。散列值由散列函数(算法)得出,好的算法尽量避免散列冲突(散列值不唯一)。

提高缓存访问命中率:
淘汰算法:最少使用(LFU),最久未用(LRU)。

缓存系统:

Memcached, Berkeley DB, Redis。
MongoDB也可以做缓存,Redis和Berkeley DB也支持持久化存储,没那么绝对。

Memcached:
基于散列映射。
LRU。
客户端(任何语言)通过Memcached协议 来与守护进程通信(c语言)。
服务器端无切片和副本等分布式功能,服务器之间不通信,需要应用端实现。

Berkeley DB(轻量级):
嵌入式数据库系统。
架构简单,key-value。
支持ACID数据库事务处理,细粒度锁,XA接口,热备份,同步复制等。
核心不支持分布式,支持持久化。

Redis(远程字典服务器):
1.超高性能,每秒数十万次。
2.支持字符串,散列表,列表,集合。
3.支持事务性,例如a转账给b,a扣钱,b加钱,如果b未加成功,a扣的钱返还。
4.可设定生命周期,为key-value设置生命周期(TTL),例如验证码,限时特惠。
5.持久化,全量保存的RDB镜像(速度快),增量保存的AOF日志(资源消耗少,丢失少)。
6.主从同步,从服务器利用发布/订阅机制从主服务器接收发布的记录。
7.哨兵,自动化监控和故障恢复。
8.适用读多写少,主服务器写,从服务器读,主服务器一旦出错,系统恢复麻烦。Redis3.0后提出了“集群”概念,包括预分片技术,对水平扩展更好的支持。

推荐阅读更多精彩内容