本文是《极客时间》-《TiDb极简入门》的学习笔记。传送门:https://time.geekbang.org/opencourse/videointro/100089601
一 数据库发展历史
1. 发展简史
模型提出:上世纪70年代,关系型数据库模型被提出
商业起步阶段:上世纪80年代,关系数据库逐步完成了工程与产品实现,代表性产品有Oracle, DB2, Sql Server,Sybase
开源数据库萌芽阶段:90年代中后期,开源数据库开始萌芽,代表性产品有 MySql,PostgreSql
互联网时代来临:上世纪末到本世纪初,开启了互联网时代,数据量爆发式增长
谷歌3架马车:2006年,GFS/BigTable/Mapreduce, Nosql大数据生态开始出现: Hadoop/Redis/MangoDb
移动互联网时代: 2010,4G网络开启了移动互联网时代。集成了分布式技术与关系模型的newsql数据库开始涌现,代表产品有Spanner,TiDB; 云原生数据库出现,Dbaas(Database-as-a-service)产品涌现
HTAP是强需求
HTAP(混合事务/ 分析处理,Hybrid Transactional/Analytical Processing)
2.数据技术发展的驱动力
1.业务发展: 数据容量的爆发式增长,包括数据存储量,吞吐量
2.产品创新: 对数据的交互效率与数据模型的多样性,查询语言/计算模型/数据模型/读写延时要求
3.硬件与云计算的发展:数据架构的变迁,计算与存储分离,一体机,云原生
3.数据容量催生数据架构演进
早期,数据量只有几百GB,单节点本地磁盘是最高效的数据架构,单机关系型数据库是主流
随着数据量增大,开始纵向扩展(Scale up),加入更多的cpu/ 内存/ 硬盘(升级硬盘),Share Disk 成为了代表性架构
但是硬件升级有上限,当数据增长速度超过了硬件升级速度,scale up失效,只能通过分布式的share nothing架构来应对(即横向扩展,scale out)
4.数据模型和交互效率的演进
存储结构/事务需求
Sql
关系型数据库
结构化数据结构
Nosql数据库
在很多场景下,很多非结构化的数据需求突出,出现了Nosql数据
无法支持事务(OLTP,在线业务)
NewSql
原生分布式关系型数据库
分布式 SQL 事务
newSQL 提供了与 noSQL 相同的可扩展性,而且仍基于关系模型,还保留了极其成熟的 SQL 作为查询语言,保证了ACID事务特性。
5.数据技术栈和数据产品的本质
应对不同的业务场景,基于这些相对固定的基础数据技术要素,进行各种数据技术与架构的trade off
二 分布式存储系统
1.分布式系统发展的原因
内因:分布式系统是数据爆发增长的刚需
经济原因:用廉价的机器,可以获得很好的cpu性能,并且具有很好的弹性
2008年后,出现了很多分布式系统产品。
2.分布式系统概念
概念看wiki,本质上就是计算与存储的分治
分布式是海量数据与计算的代名词
高可用性:数据副本冗余(对比集中式系统,这就是分布式系统需要多做的事情)
3.分布式的主要挑战
1.如何最大程度实现分治与协助
2.如何实现全局一致性(全局序列化/全局时钟)
3.如何实现故障与部分失效的容错
4.如何应对不可靠的网络并进行网络分区
4.CAP理论
分布式系统里最多只能同时满足CAP三项中的两项
Consistent: 一致性:所有节点在同一时间数据完全一致
Availability: 可用性:服务在正常响应时间内的可用
Partition Tolerance: 分区容忍性:分布式系统在遇到某节点或者网络分区故障的时候,仍然能提供CA的服务
关系型数据库:ACID特性
ACID与CAP里的两个一致性概念不同
三 Tidb
分布式关系数据库,两个重要基础
1.2013年google spanner/F1论文
2.2014年 Raft论文
Tidb:基于以上两个理论,兼容mysql,原生分布式,关系型数据库,HTAP