数据类型与分布式存储

================================================================================

概述:


================================================================================

数据类型

 1.结构化数据

定义:

  • 结构化数据即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据;

  • 能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示;

  • 结构化数据,简单来说就是数据库。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。这些应用需要哪些存储方案呢?基本包括高速存储应用需求、数据备份需求、数据共享需求以及数据容灾需求;

  • 所有关系型数据库中的数据全部为结构化数据;

  • 结构化数据:SQL, TPS(事物处理系统)较差, MySQL(主从复制、分库分表来提升性能);

 2.非结构化数据

定义及作用:

  • 非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等

  • 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。

  • 非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)

  • 非结构化WEB数据库主要是针对非结构化数据而产生的,与以往流行的关系数据库相比,其最大区别在于它突破了关系数据库结构定义不易改变和数据定长的限制,支持重复字段、子字段以及变长字段并实现了对变长数据和重复字段进行处理和数据项的变长存储管理,在处理连续信息(包括全文信息)和非结构化信息(包括各种多媒体信息)中有着传统关系型数据库所无法比拟的优势。

  • 非结构化数据:k-v

 3.半结构化数据

定义及作用:

  • 所谓半结构化数据,就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。

  • 半结构化数据:json, xml (Document Store文档存储, mongodb、Elasticsearch)

  4.数据模型

  • 结构化数据:二维表(关系型)

  • 半结构化数据:树、图

  • 非结构化数据:无 

  • RMDBS的数据模型有:如网状数据模型、层次数据模型、关系型 (oracle,mysql等

  • nosql非关系数据库(memcached,redis,mangodb)

  • 结构化数据:先有结构、再有数据

  • 半结构化数据:先有数据,再有结构

CAP理论(一致性、可用性、分区容错性)

 CAP理论在互联网界有着广泛的知名度,知识稍微宽泛一点的工程师都会把其作为衡量系统设计的准则。大家都非常清楚地理解了CAP:任何分布式系统在可用性、一致性、分区容错性方面,不能兼得,最多只能得其二,因此,任何分布式系统的设计只是在三者中的不同取舍而已

定义及作用:

  • C(一致性):所有的节点上的数据时刻保持同步;

  • A(可用性):每个请求都能接受到一个响应,无论响应成功或失败;

  • P(分区容忍):系统应该能持续提供服务,即使系统内部有消息丢失(分区);

高可用、数据一致是很多系统设计的目标,但是分区又是不可避免的事情

CA without P:

  • 如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但其实分区不是你想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。

CP without A:

  • 如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。

AP wihtout C:

  • 要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

分布式存储技术及应用

 1.海量数据的关键环节及面临的挑战

大数据下的关键环节:

海量数据的生成

  • 访问日志数据

  • 业务数据

  • 用户上传

海量数据应用

  • 精准广告

  • 个性化定制

  • 未来预测

海量数据的管理

  • 文件

  • 图片

  • 数据

大数据带来的挑战

  • 数据采集

  • 数据存储

  • 数据搜索

  • 数据共享

  • 数据传输

  • 数据分析

  • 数据可视化

 2.大数据如何存储

   根据did you know(http://didyouknow.org/)的数据,目前互联网上可访问的信息数量接近1秭= 1百万亿亿 (1024)。毫无疑问,各个大型网站也都存储着海量的数据,这些海量的数据如何有效存储,是每个大型网站的架构师必须要解决的问题。分布式存储技术就是为了解决这个问题而发展起来的技术.

传统存储问题:

  • 纵向扩展受阵列空间限制;

  • 横向扩展受交换设备限制;

  • 节点受文件系统限制

如:NFS图片存储会遇到带宽、存储空间、请求并发等问题

分布式存储的概念:

  • 与目前常见的集中式存储技术不同,分布式存储技术并不是将数据存储在某个或多个特定的节点上,而是通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。

分布式存储系统的特性:

可扩展(Scalable)

  • 分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且,随着集群规模的增长,系统整体性能表现为线性增长。

可靠性(Reliable)

  • 高性能。无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能。

低成本(Cheap)

  • 分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维。

易用

  • 分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并能够方便地与其他系统集成,例如,从Hadoop云计算系统导入数据。

分布式存储的机制分类:

通用分布式存储:

  • 分布式存储(不支持挂载,不支持复杂的文件系统机制,不支持权限模型),mogilefs, fastdfs, ...

专用分布式存储:

  • 分布式文件系统(支持挂载), moosefs, ...

分布式存储的挑战

  • 节点间通信;

  • 数据存储;

  • 数据空间平衡;

  • 容错;

  • 文件系统支持

分布式存储的核心点

  • 元数据存储(高效)

  • 数据存储(冗余)

存储一般分为两种类型:

集中式:

  • NAS:Network Attached Storage; 文件系统级别, 例如NFS, FTP, SAMBA… 

  • SAN:Storage Aera Network; 块级别, 例如IP SAN, FC SAN…

分布式 :

  • 中心节点存储:每个集群中有节点专门用来存储元数据, 其他节点则存储部分数据 

  • 无中心节点存储:每个集群各节点都存储元数据和部分数据

分布式存储和分布式文件系统:

  • 文件系统: 有文件系统接口

  • 存储: 无文件系统接口, 通过API访问

分布式存储文件系统的常见实现

Google Filesystem

GFS擅长处理单个大文件

GFS+MapReduce (编程模型-运行框架-API)可以实现程序切割到多节点运行,实现分布式处理

Hadoop Distributed Filesystem

根据GFS思想开发的,擅长处理单个大文件

ClusterFS擅长处理单个大文件
Taobao Filesystem淘宝开源的文件系统,擅长处理海量小文件,适用于大规模场景。
MogileFS是一个高性能的分布式存储,擅长处理海量小文件
Ceph是一个 Linux PB级别的分布式文件系统,测试中
MooseFS分布式文件系统,兼容POSIX(FUSE),可以直接挂载使用,当节点多,并发量大环境中,可扩展性差,性能一般。
Lustre一种平行分布式文件系统

 3.具体技术及应用

  -海量的数据按照结构化程度来分,可以大致分为结构化数据,非结构化数据,半结构化数据

结构化数据的存储及应用

定义:

  • 所谓结构化数据是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型,存储在关系数据库里,可以用二维表结构来表达实现的数据。

存储:

  • 大多数系统都有大量的结构化数据,一般存储在oraclaMySQL的等的关系型数据库中,当系统规模大到单一节点的数据库无法支撑时,一般有两种方法:垂直扩展与水平扩展。

垂直扩展:

  • 垂直扩展比较好理解,简单来说就是按照功能切分数据库,将不同功能的数据,存储在不同的数据库中,这样一个大数据库就被切分成多个小数据库,从而达到了数据库的扩展。一个架构设计良好的应用系统,其总体功能一般肯定是由很多个松耦合的功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一张或多张表。各个功能模块之间交互越少,越统一,系统的耦合度越低,这样的系统就越容易实现垂直切分。

水平扩展:

  • 简单来说,可以将数据的水平切分理解为按照数据行来切分,就是将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他的数据库中。为了能够比较容易地判断各行数据切分到了哪个数据库中,切分总是需要按照某种特定的规则来进行的,如按照某个数字字段的范围,某个时间类型字段的范围,或者某个字段的hash值。

垂直扩展与水平扩展各有优缺点,一般一个大型系统会将水平与垂直扩展结合使用。

非结构化存储及应用

定义:

  • 相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。

存储:分布式存储

分布式文件系统是实现非结构化数据存储的主要技术,

  • Google File System(GFS)

  • Hadoop Distributed Filesystem(HDFS)

  • TFS:Taobao Filesystem

  • GlusterFS(去中心化设计)

  • Lustre,HPC

  • Ceph(内核级别构建)

  • Mogile Filesystem(分布式存储)

    ·API(php,java,perl,python)

  • Moose Filesystem(MFS)

  • FastDFS

半结构化存储及应用

定义:

  • 就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据, 半结构化数据模型具有一定的结构性,但较之传统的关系和面向对象的模型更为灵活。半结构数据模型完全不基于传统数据库模式的严格概念,这些模型中的数据都是自描述的。

  • 由于半结构化数据没有严格的schema定义,所以不适合用传统的关系型数据库进行存储,适合存储这类数据的数据库被称作“NoSQL”数据库。

存储:NoSQL 数据库

  • 被称作下一代的数据库,具有非关系型,分布式,轻量级,支持水平扩展且一般不保证遵循ACID原则的数据储存系统。“NoSQL”其实是具有误导性的别名,称作Non Relational Database(非关系型数据库)更为恰当。所谓“非关系型数据库”指的是:

  • 使用松耦合类型、可扩展的数据模式来对数据进行逻辑建模(Map,列,文档,图表等),而不是使用固定的关系模式元组来构建数据模型。

  • 以遵循于CAP定理(能保证在一致性,可用性和分区容忍性三者中中达到任意两个)的跨多节点数据分布模型而设计,支持水平伸缩。这意味着对于多数据中心和动态供应(在生产集群中透明地加入/删除节点)的必要支持,也即弹性(Elasticity)。

  • 拥有在磁盘或内存中,或者在这两者中都有的,对数据持久化的能力,有时候还可以使用可热插拔的定制存储。

  • 支持多种的‘Non-SQL’接口(通常多于一种)来进行数据访问。