本文根据DBAplus社群第99期线上分享整理而成,文末尚有好书送哦~
讲师先容
陈鸿威
云财经大数据CTO
曾任百度高级工程师,现主持计划开辟云财经股市谍报和大数据中心;
拥有丰富的在线电商、证券及时体系、金融海量数据在线盘算的实战履历;致力于各类分布式和大数据开源项目研究。
主题简介:
1、传统数据库回顾
2、分布式底子理论
3、HBase特性
4、HBase底层架构
5、HBase计划要点
传统数据库回顾
近些年来,各种互联网+的公司如雨后春笋般出现,做一个在线平台大概做一个APP根本成为这些公司的标配。Web体系的盛行,数据网络越来越轻易,促使各类数据库体系应用得越来越广泛。
我们在平常的技能讨论大概实际应用中常常会提到传统数据库。提到传统数据库,很多人会很轻易遐想到Oracle、MySQL、SQLServer等带有很显着关系型数据库特性的数据库体系。在我看来,传统数据库并不便是这些数据库,而是看你怎么用的。一样平常来说,传统数据库包罗以下三个光显的特点:
1、事件的保障:ACID
ACID一言以蔽之就是原子性、同等性、隔离性、长期化事件,它是四个单词的缩写:
Atomicity原子性事件中全部操纵要么全部完成,要么全失败。
Consistency同等性在事件开始时大概竣事时,数据库应该处于同一状态。
Isolation隔离性事件将假定只有它本身在操纵数据库,相互不知晓。
Durablity一旦事件完成,就不能返回。
要做到ACID,从编程的角度来说,数据库系同一定会用到锁。
一样平常对事件要求比力高的重要是买卖业务场景,银行体系、大型在线电商买卖业务体系用得比力多。对于绝大多数创业公司而言,事件是一个偏理论的概念。实际上在,在线体系中,事件是一个很有效的东西,我们举个栗子:
用户A在平台购买增值服务的场景,会有很多种处理惩罚方式。
一样平常的程序员会如下处理惩罚:
在财务表中增长一条用户A的扣费记录。(扣费)
在用户增值服务表中增长一条用户A的增值服务记录。(开通服务)
用户至上的程序员会如下处理惩罚:
在用户增值服务表中增长一条用户A的增值服务记录。(开通服务)
在财务表中增长一条用户A的扣费记录。(扣费)
三年以上工作履历的程序员会如下处理惩罚:
在财务表中增长一条用户A的扣费记录。(扣费)
判定财务表中是否扣费乐成,不乐成关照体系买卖业务失败。
在用户增值服务表中增长一条用户A的增值服务记录。(开通服务)
判定用户增值服务表中是否增长乐成,不乐成删除财务表中的扣费而且关照体系买卖业务失败。
那么用上事件之后,你只要提交给数据库一样平常程序员操纵,数据库就会给你三年以上工作履历的程序员的操纵结果,在主从架构读写分离的数据库布局中结果还会更好。
2、丰富的数据范例和SQL的操纵方式
传统的数据库体系可以存很多种范例的数据,重要包罗:
数字家属、整数和小数。整数又可以分为32位的,64位的…
字符串范例。字符串又分为固定长度的和可变长度的…
时间家属。日期、时间…
二进制流…
这么多范例,确实很丰富。我们所看到的,都可以是字符,就算二进制流,也可以通过转码用字符串表现。固然,在讲字符串的时间,我们是把编程语言进化到了一个很高级的程度,开辟的友爱性大于存储本钱。
对于传统数据库体系的常用操纵,我们一样平常会说CURD。即对表的增编削查,根本都用SQL语句来实现。SQL语句的布局重要分为以下几大部分:
操纵,select、insert、update、delete。
表对象。
字段范围(*/f1/f2…)。
Where条件。
Order排序(desc/asc)。
查询范围限定(top/limit)。
……
SQL语句是为利用者友爱而计划的,无论何种数据库引擎,SQL末了都被映射成为IO和内存操纵。
3、严格的数据模子:行式存储
在传统数据库体系中,一样平常来说在第一次写入数据之前,都必要创建库和创建表,而每一个表都有确定的表头,确定列数,每一列的名字以及确定的数据范例。在新数据的写入大概数据的修改的时间,数据库体系会根据创建好的表布局严格校验数据的合法性,对表布局的调解一样平常都必要很大的修改代价。
在存储单位里,同一行的数据会分布在相邻的存储单位里。
列式存储相对于行式存储而言,其同一列的数据会分布在相邻的存储单位里。
题外话:除了行存储和列存储,常见尚有文档模子,典范的代表就是MongoDB。假如用传统的行的角度来看,差别的行列数可以不一样,列的名字和数据范例也可以不一样,列内里可以是另一个嵌套的行。
互联网的需求
在互联网化的大环境下,很多体系都很轻易在短时间内体系网络上亿的数据,而且这些数据颠末加工,还要为几十万、几百万乃至更多用户提供访问。从平台角度来说,一样平常就是从小到大,从简单到复杂的过程。重要来说,具有一下三方面特点:
对数据高并发读写的要求
数据库读写压力巨大,硬盘IO无法遭受。一样平常处理惩罚方法是主从架构,读写分离,分库、分表,缓解写压力,加强读库的可扩展性。
对海量数据的存储和访问
存储记录数量有限,SQL查询服从极低的环境下。通太过库、分表,缓解数据增长压力。
伸缩性,可用性,可靠性方面的需求
横向扩展艰巨,无法通过快速增长服务器节点实现,体系升级和维护造成服务不可用。通过主从架构,加强读库的扩展性,利用MMM架构处理惩罚写的瓶颈。
传统数据库的瓶颈
分库分表缺点:
受业务规则影响,需求变动导致分库分表的维护复杂。
体系数据访问层代码必要修改。
主从架构缺点:
Slave及时性的保障,对于及时性很高的场合大概必要做一些处理惩罚(在第一个购买增值服务的例子中,添加扣费记录之后,在读写分离的场景下,立马去从库查询扣费记录不肯定能查到)。
高可用性题目,Master就是谁人致命点,轻易产生单点故障。
MMM缺点:
本身扩展性差,一次只能一个Master可以写入,只能办理有限数据量下的可用性。
分布式底子理论
1、CAP
分布式范畴CAP理论
Consistency同等性:数据同等更新,全部数据变动都是同步的。
Availability(可用性):好的相应性能。
Partitiontolerance:分区容忍性。
在分布式体系中,这三个要素最多只能同时实现两点,不大概三者分身;对于分布式数据体系,分区容忍性是根本要求;对于大多数Web应用,捐躯同等性而调换高可用性,是如今多数分布式数据库产物的方向。
2、Base
BasicallyAvailable:根本可用支持分区失败。
Softstate软状态:状态可以有一段时间差别步,异步。
Eventuallyconsistent:终极同等性,终极数据是同等的就可以了,而不是时时同等。
3、NoSQL活动两个核心理论
Google的BigTable
BigTable提出了一种很风趣的数据模子,它将各列数据举行排序存储。数据值按范围分布在多台呆板,数据更新操纵有严格的同等性包管。
Amazon的Dynamo
Dynamo利用的是别的一种分布式模子。Dynamo的模子更简单,它将数据按key举行hash存储。其数据分片模子有比力强的容灾性,因此它实现的是相对疏松的弱同等性:终极同等性。
HBase特性
HBase是GoogleBigtable的开源实现,雷同GoogleBigtable利用GFS作为其文件存储体系,HBase利用HadoopHDFS作为其文件存储体系;Google运行MapReduce来处理惩罚Bigtable中的海量数据,HBase同样利用HadoopMapReduce来处理惩罚HBase中的海量数据;GoogleBigtable利用Chubby作为协同服务,HBase利用ZooKeeper作为对应。
重要特点
列的可以动态增长,而且列为空就不存储数据,节流存储空间。
HBase主动切分数据,使得数据存储主动具有程度scalability。
HBase可以提供高并发读写操纵的支持,分布式架构,读写锁等待的概率大大低落。
不能支持条件查询,只支持按照Rowkey来查询。
临时不能支持Masterserver的故障切换,当Master宕机后,整个存储体系就会挂掉。
HBase底层架构
HBase是一个列式存储的数据库体系,跟全部的数据库系同一样,数据库是依靠文件体系的,在传统数据库内里我们常常提到存储引擎,比方MySQL有MyISAM/InnoDB,Oracle/SqlServer不开源,没有那么多选择,但都会有本身的存储引擎,说得普通一点就是假造文件体系,HBase的文件体系是HDFS,一种分布式文件体系,以是HBase天然具备分布式的特性。同时HadoopMapReduce为HBase提供了高性能的盘算本领,Zookeeper为HBase提供了稳固服务和failover机制。
HBase计划要点
1、逻辑数据模子
Table
Region
ColumnFamily
Row
Column
Value
TimeStamp
你也可以把HBase当作一个多维度的Map模子去明白它的数据模子。正如下图。
2、HBase的体系构成
NameNode存储DataNode信息,ZooKeeper负责调治。
一个Region只会存在一台RegionServer上,一台RegionServer上可以包罗多个Region。
一个逻辑的表包罗多个Region,分布在各个RegionServer上,对应用程序来说只有一个大表不消管分表分库。
Region的定位
-ROOT-
.META
存储分布
每一行包罗N个列,以列的情势分布在差别Region内里。
3、HBase各对象职责
Client
HBase的访问接口,维护cache加快HBase的访问。
Zookeeper
监控Master,包管只有一个Master;
存储Region的入口地点;
监控RegionServer上下线,并告知Master;
存储Hbaseshcema和Table的元数据。
Master
分配Region到RegionServer;
RegionSever的负载均衡;
发现失效的RegionServer并重新分配其上的Region
管理用户对Table的增编削查操纵。
RegionServer
维护Region,处理惩罚对这些Region的IO;
SplitCompact。
4、应用方式
HBase是三维有序存储的,通过RowKey(行键),columnkey(columnfamily和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据举行快速定位。
RowKey是HBase表布局计划中很紧张的一环,HBase中RowKey可以唯一标识一行记录,在HBase查询的时间,有以下2种方式:
按指定RowKey获取唯逐一条记录,get方法
(org.apache.hadoop.hbase.client.Get)
按指定的条件获取一批记录,scan方法
(org.apache.hadoop.hbase.client.Scan)
第一种雷同key-value查找,第二种可以实现简单的条件查询功能。
QA
Q1:HBase是不是没有传统表的概念了。感觉都像是键值存储。
A1:假如存储角度看是涵盖了的,但是去掉了关系。
Q2:HBase与MongoDB的利用场景的区别老师可否简单先容一下?
A2:HBase得当做数据分析,MongoDB在线服务性能很好,尤其是读,HBase要连合MapReduce,尚有就是MongoDB得当Web服务,比方PHP。
直播链接
回听直播请戳:
https://m.qlchat.com/topic/240000397746115.htm
暗码:222
好书相送
在本文微信订阅号(dbaplus)批评区留下足以引起共鸣的真知灼见,并在本文发布后32小时之内成为点赞数最多的一名,可得到以下册本一本~
特别鸣谢清华大学出书社提供图书赞助。
精选专题(官网:dbaplus.cn)
◆MVP专栏◆
杨志洪丨杨建荣丨邹德裕丨韩锋丨欧阳辰
网易丨腾讯云丨百度丨朱祥磊丨卢钧轶
◆近期活动◆
云数据库架构计划与实践沙龙火热报名中
我要评论