为帮助开发者更好的了解和运用数据库,腾讯云数据库团队特出品《深入浅出理解云数据库》系列文章,从数据库的基本概念到云数据库特性及应用,从数据库基础原理知识到腾讯云经典实战案例解读,带你走进云数据库的世界。关注“腾讯云数据库”微信公众号,开启2020年的DB修炼之旅。
第一回请点击:深入浅出理解云数据库,年薪百万DBA之路 · 第一回
1
PartⅠ 云数据库的市场分析及应用
在讲云数据库之前,我们先来看一下云计算的整个市场。
业内对云计算主要分为三类,公有云、私有云、混合云。公有云指第三方服务提供商为用户提供的可以直接通过internet访问的云,它的核心本质是共享资源。私有云是指为客户单独使用而搭建的云,它的核心本质是专有资源。混合云是云计算现在的主要模式和发展方向,表现形态是将数据存储到私有云上,同时又保有公有云的计算资源及弹性服务,这种个性化的方案可以达到即节省又安全的目的。
举个例子,一家3口准备出去玩,选择打车前往,这是公有云;选择开自己车前往,这是私有云。突然来了3个亲戚坐不下,一部分选择打车前往,一部分选择自驾前往,这是混合云。
而近些年又一一个新的概念,专有云。专有云是指在公有云的基础上,对一部分根据企业要求进行定制化,比如将计算资源私有化或计算、存储私有化,本质是个性定制化。
我们下面来看一组数据。2017年,美国公有云支出占IT支出24%左右,私有云5%。而中国公有云6.5%,私有云7.9%。美国信息化领先全球市场3-5年(资料来源:麦肯锡)。
对比全球云化,国内的云计算市场份额占有率具有极大的上升空间。
2017年我国云计算整体691亿元,同比34.32%;公有云264.8亿元,同比55.7%;私有云426.8亿元,同比23.8%。公有云IaaS148亿元,同比70.6%。预计未来私有云软件和服务市场占比仍将呈现增长态势,私有云是长期存在的产品形态,在中国有广大的市场空间。
据Gartner研究,2018年整个数据库的市场规模为461亿美元,其中云数据库为104亿美元。与2017年相比,数据库市场增长了18.4%,而云数据库贡献了68%的增长。
企业上云,数据上云,自然而然也推动了数据库上云的步调,作为云时代诞生的云原生数据库,云数据库天然地具备云的各种灵活性,它把云计算的分布式、灵活扩展以及成本优势淋漓尽致地展示出来,从而能够提供强大的创新能力、丰富多样的产品体系、经济高效的部署方式和按需付费的支付模式。
由此来看,数据库上云是大趋势,将数据库部署在数据中心的服务器上很快将被“淘汰”,而一些仍在使用本地部署的大企业,也将会很快与数据库云服务结合起来。
作为TO B的项目,终归还是需要和行业强绑定的,那我们来一起看一下在不同行业中,云数据库的应用。
其中有数据库典型应用的行业有:金融、医疗、电商、物联网、游戏这些,下面我们来逐一看一下云数据库可以帮这些行业解决什么痛点,不同的云计算服务商也提供了各种不同的解决方案帮助客户解决痛点。
金融行业有海量的金融数据库,与业务强绑定,业务可靠性和优质体验是金融行业的首要需求;金融行业属于强监管行业,数据泄露或破坏对个人、社会乃至国家影响极大。针对以上痛点,云数据库具有以下特性:
电商行业业务流量大,遇到业务高峰会存在海量请求压力;如果因为数据库造成了业务宕机会造成不可估量的业务财产损失针对以上痛点,云数据库具备以下特性:
游戏行业游戏玩家数据量大,多个分区数据服务,每个分区都需要快速读取数据;开服合服等场景多,对数据库的需求较为灵活,不同业务场景数据需求不同针对以上痛点,云数据库具备以下特性:
物联网行业业务场景复杂,读写要求度高;数据量增长速度快,随时会遇到存储瓶颈。针对以上痛点,云数据库具备以下特性:
以上是一些简单的行业解决方案,TO B业务市场中,针对不同的行业、不同的企业诉求也是不一样的,所以在应用过程中也存在着不同细致程度的方案,通过不同的架构方案、数据库选型等来协助客户实现真正的价值。
1
Part Ⅱ 数据库基础原理知识
在正式进入云数据库之前,我们先来补充一些数据库的基础知识,对其工作原理等能有一个基本认识,包括存储引擎主要功能及工作原理,常见DBMS系统基本功能要求,常见的几种分布式DBMS架构等。接下来我们会以MySQL为例,再去详细介绍一下MySQL基础知识,包括MySQL基础架构、日志系统、事务隔离、锁、索引、接口等。了解了这些之后,我们就可以很轻松地上手各大厂商的云数据库了。
关系型数据库中,存储的是海量的数据表和千丝万缕的关系表,在我们设计数据库之前都会关注一个问题——存储引擎,那么什么是存储引擎呢?
存储引擎是一种数据库底层软件组织,数据库管理系统可以使用存储引擎来创建、查询、删除和修改数据。面对如此多的数据表和关系表,数据存储的时候会以各种形态进行存储,因此面对不同数据类型的数据处理的方式也不同。拿mysql来说,他有很多种存储引擎,不同的存储引擎对于不同类型的数据处理方式、处理能力也不同,选择不同的存储引擎可以最大程度地让数据库得到利用,而mysql的核心就是存储引擎。mysql中常见的存储引擎有:MyISAM、InnoDB、MEMORY、MERGE和ARCHIVE,下面我们针对这些存储引擎来做一个了解。
在介绍存储引擎之前,我们先对一下可能出现的专业术语做一个大概的了解:
名称 | 释义 |
---|---|
存储限制 | 可存储空间最大容量。举个例子就是冰箱的最大存储空间 |
事务 | 作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。举个例子,之前有个脑经急转弯,把大象放进冰箱需要几步,再把长颈鹿放进冰箱需要几步,我们来看把长颈鹿放进冰箱:step1:先把冰箱打开step2:把大象取出来step3:把长颈鹿放进去step4:把冰箱关上这一系列操作就叫做事务,且每个环节都是必须的,试想如果冰箱只够放下一个大象,如果进行前两步,长颈鹿就放不进去。通过这个例子我们也能衍生出事务的四个特性(ACID特性):A:原子性(Atomicity) 事务中的操作要么都不做,要么就全做。C:一致性(Consistency) 事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态。I:隔离性(Isolation) 一个事务的执行不能被其他事务干扰D:持久性(Durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的 |
索引 | 在mysql中也叫做“键”,他的本质是一种数据结构,存储引擎可通过索引快速找到相关数据。举个例子我们看一本书的时候,想要快速找到我们想要的内容,一般都会去看他的目录,快速找到页码,这个目录就可以理解为一种索引。在mysql中,不同的索引类型针对不同的表结构,可以大大提高查询速度,下面我们看一下常用的集中索引类型:• B-Tree索引:简而言之就是我们熟知的树结构,实际上很多存储引擎使用的是B+tree的模式,即每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历。• 哈希索引:存储引擎对所有的索引列计算出一个哈希码,将哈希码存储在索引中,同时哈希表中保存每个数据行的指针,即存的是hash值和对应的行数。举个例子:一张表里第一列为姓名,第二列为年龄,第一列的每个姓名都会由hash函数生成一个索引值,比如我们要查找一个名叫“张三”的年龄,首先会先把“张三”转为对应的hash值,然后根据hash值找到第一列对应的行,即可得到相应的年龄• R-tree:也称为空间索引,无前缀查询,可以用作地理数据存储• 全文索引:类似于搜索引擎,通过查找文本中的关键词来搜索 |
缓存 | 引入数据缓存可以提高性能,数据一份存在数据库中,一份存在缓存中。比如查询数据的时候我不需要每次都去数据库里查询,近期的请求可以直接通过缓存查询很大的提高了性能 |
主键 | 唯一标识一条记录,不能有重复的,不允许为空,比如我们每个人的身份证号 |
外键 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值,比如公司存的个人信息表中的身份证号,在公司信息表中因为身份证号是我们自己个人信息表的主键,在公司信息表里就叫外键 |
在mysql5.1及之前的版本,MyISAM是mysql的默认存储引擎。它提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,且崩溃后无法安全恢复。MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。MyISAM是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度。
是mysql的默认事务型引擎,也是最重要和使用最广泛的存储引擎。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。
以上两种存储引擎是最常见的两种存储引擎,下面我们对比一下这两种存储引擎有什么区别:
MyISAM | InnoDB | |
---|---|---|
存储结构 | 存储成三个文件:表定义文件、数据文件、索引文件。 | 所有的表都放在同一个数据文件中 |
存储空间 | 支持三种存储格式:静态表、动态表、压缩表。针对占用空间大,不会再修改的表可以采用压缩表,能极大的节省占用空间 | 需要更多的内存和存储,因为要建立缓冲池来提高索引性能 |
事务支持 | 无事务支持能力,崩溃后无法安全恢复 | 具有事务、回滚和崩溃修复能力 |
锁 | 只支持表级锁 | 支持事务和行级锁 |
全文索引 | 支持全文索引 | 不支持全文索引 |
外键 | 不支持 | 支持 |
总的来说在选型时,可以遵循以下几点:
• 如果需要具有事务、回滚和崩溃修复的能力,选InnoDB;
• 如果操作几乎都是读操作,可以选择MyISAM,有读有写交替频繁选InnoDB。
还有几种常见的存储引擎,如MEMORY,这种存储引擎会把所有的数据都存在内存中,如果需要快速查询访问数据的话,可以选择这种存储引擎,但是又一个缺点是重启会有数据丢失;MERGE存储引擎是MyISAM的一个变种,是由多个MyISAM合并的虚拟表;ARCHIVE存储引擎只支持INSERT和SELECT操作等等还有诸多其他引擎。
有了数据库之后,我们怎么对其进行维护和管理呢,这就是DBMS系统,中文名也叫数据库管理系统,用户和管理员都可以通过DBMS对数据库进行一系列操作和维护,以保证数据库的安全性和完整性。每个云服务商和数据库厂商都会提供这样的软件来协助用户管理数据库,在设计DBMS系统的时候,主要关注以下性能指标:
数据库中有个很重要的概念就是锁,他是一种机制,当多个用户同时对数据库进行访问操作的话,会带来数据库不一致的问题,而锁的存在就是为了保障数据库数据一致性和完整性。举个例子来理解,在商场中会出现多个消费者使用同一个试衣间的情况,当一个试衣间被一个消费者占用的时候,里面的消费者会把锁锁上,等试完了,打开锁,下一位消费者才可以进入。
锁的类型从操作类型上来看可以分为读锁和写锁,读锁是可以共享的也称为共享锁,当多个用户同时读取一份数据,不对数据有改动,读取的过程是互不干扰的;写锁也成排他锁,当一个试衣间关闭之后其他消费者就无法加入,写锁会阻塞所有的读锁和写锁。
为了最大程度的提高资源利用度,锁的粒度不同,针对不同的操作,尽可能地降低锁的粒度,可以最大程度地利用资源。通常情况下,锁的粒度可以分为:表级锁、页级锁、行级锁。这三种锁的特性大致可以归纳如下:
数据备份是容灾的基础,防止因为出行误操作或系统故障引起数据丢失,将数据存储到存储介质中的一个过程。根据备份的方法,可以分为冷备和温备:
复制解决的问题的是让一个服务器的数据与其他服务器保持同步,主库的数据库可以同步复制到多个备库上,主库崩溃或不可用的时候,备库也可以快速替代主库。数据库的复制方式一般可以分为异步复制、全同步复制和半同步复制:
安全组可以理解为一种防火墙,其包含过滤功能,用于设置单台或多台云数据库的网络访问限制。安全组是一个逻辑上的分组,用户可以将同一地域内具有相同网络安全隔离需求的云数据库实例加到同一个安全组内。云数据库与云服务器等共享安全组列表,安全组内基于规则匹配。
安全组的规则基于以下几点:
一个安全组可以包含多个安全规则,那么多种安全规则的优先级是怎么样:
当有流量入/出绑定某安全组的实例时,将从安全组规则列表顶端的规则开始逐条匹配至最后一条。如果匹配某一条规则成功,允许通过,则不再匹配该规则之后的规则。
扫描下方二维码关注“腾讯云数据库”,第三回即将开启;回复“迪B课堂”获得腾讯云高级产品经理原创数据库实战视频教程。
年终回馈
↓↓更多惊喜优惠请点这儿~