大家好,我是悟空。上一篇文章讲了MySQL和NoSQL的区别和优缺点:《有了 MySQL,为什么要用 NoSQL》这次我们来谈谈分布式场景下的数据库。首先我们来看一下关系数据库和非关系数据库的区别和特点。1.关系与非关系1.1关系1.1.1什么是关系?关系型数据库是指采用关系模型(二维表模型)组织数据的数据库,由二维表和它们之间的联系构成的数据组织。1.1.2常用关系数据库常用关系数据库管理系统(ORDBMS):Oracle、MySql、MicrosoftSQLServer、SQLite、PostgreSQ、IBMDB2。1.1.3关系型的优点二维表结构非常接近正常的开发逻辑。支持常见的SQL(结构化查询语言)语句。丰富的完整性大大减少了数据冗余和数据不一致的问题。可以使用SQL语句在多个表之间做非常复杂的查询;关系数据库为事务提供支持。1.1.4关系型的不足(1)存储行记录。不能存储数组、嵌套字段等格式的数据。(2)不方便扩展表结构。操作不存在的列会报错,需要执行SQL语句添加列。并且修改的时候需要特别注意,因为更新表的时候表会被锁很长时间,可能会对线上环境造成严重的影响。(3)内存占用高。关系型数据库在对数据量较大的表进行统计操作时,会占用大量内存,因为即使只对某一列进行操作,也会将整行数据从存储设备读入到内存中。记忆。(4)全文搜索性能差类似于MySQL的关系型数据库,只能用like来匹配全表扫描,效率很低。现在有很多场景需要支持模糊匹配,必须支持高效搜索。比如查询包含关键词的日志信息,或者根据某个商品关键词查询商品列表。1.2非关系1.2.1什么是非关系?NoSQLNoSQL(NoSQL=NotOnlySQL),意思是“不只是SQL”。严格来说,非关系型数据库不是数据库。应该是数据结构化存储方式的集合,可以是文档,也可以是键值对。1.2.2常见的非关系型数据库Key-value数据库:Redis、Memcached、Riak。列式数据库:Bigtable、HBase、Cassandra。文档数据库:MongoDB、CouchDB、MarkLogic。图形数据库:Neo4j、InfoGrid。1.2.3非关系型优点格式灵活:存储数据的格式可以是key、value、document、picture等形式,只支持原始类型。速度快:NoSQL可以使用硬盘或者内存进行存储,而关系型数据库只能使用硬盘;高可扩展性;低成本:nosql数据库易于部署,基本上是开源软件。1.2.4非关系型缺点无sql支持,学习使用成本高;没有交易处理。MongoDB4.0已经支持事务。数据结构比较复杂,复杂查询略有欠缺。2.分布式数据库2.1分布式数据库的定义分布式数据库其实并没有官方的定义,只是我们技术人员提出的一种约定俗成的说法。在数据库领域,当产品不断演进,逐渐被大家认可和认同,就会成为一个标准。比如微软的SQLServer数据库,其他的数据库都喜欢用它来做对比,那么SQLServer数据库就会成为一个标准。但是分布式数据库是近几年才提出来的,还比较新,没有参考资料。但是,我们可以通过这些大公司总结出来的经验来理解分布式数据库。分布式数据库是采用分布式架构实现的数据库。2.2分布式数据库的优势分布式一直是我研究的课题,现在很多流行的技术都采用了分布式架构,比如微服务、消息队列等。那我们为什么要使用分布式架构呢?简单来说,就是用多台机器(机器)横向扩展单台机器的性能。另一个重要原因是分布式可靠性,比如多机备份和容灾。数据库是否也需要提高性能,保证可靠性?答案是肯定的。哪些大公司在使用分布式数据库?每年双十一,阿里都喜欢秀一波交易记录,其分布式数据库OceanBase功不可没。腾讯、字节跳动、美团等龙头企业也开始使用分布式数据库,各大银行也纷纷推出分布式数据库。因此,分布式数据库是一种趋势。如果业务场景需要高性能、高可靠,可以考虑使用分布式架构下的数据库。2.3分布式数据库的特点首先我们来看一下数据库按事务类型区分的两种场景:联机事务(OLTP)OLTP是一种面向事务的处理过程。单笔交易数据量小,但需要在短时间内处理出结果,典型场景包括购物、支付、转账等;联机分析(OLAP)OLAP场景通常是基于大数据集的操作,典型场景包括生成个人年账单和企业财务报表。OLTP的特点是多写少读、低延迟、高并发。那么数据库+分布式在OLTP场景下有什么特点呢?特点:在写多读少的场景下非常强大。低延迟响应。支持高并发。支持海量存储。高可靠性。3.10分布式数据库3.1PingCAP的TiDB开源+社区运营良好,有很高的知名度。定义:同时支持在线事务处理和在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP),具有水平扩展或收缩、金融级高可用、实时HTAP、云原生的融合分布式数据库产品分布式数据库,兼容MySQL5.7协议和MySQL生态等重要特性。目标是为用户提供一站式OLTP(在线事务处理)、OLAP(在线分析处理)、HTAP解决方案。TiDB适用于高可用、强一致性要求高、数据规模大等多种应用场景。TiDB架构图TIDB采用分层架构,具有三个角色:TIDB:作为SQL引擎。TiKV:作为底层的分布式键值存储。PD:承担元数据管理和全局时钟的职责。TiDB的衍生项目:Ti-Binlog、Ti-CDC支持数据导出。Ti-Operator更方便的实现容器云部署。ChaosMesh支持混沌工程。缺点:不支持全局部署,给TiDB在跨地域的大规模集群应用设置了障碍。3.2Google的SpannerSpanner是Google开发的可扩展、多版本、全球分布、同步复制的数据库。它支持外部一致的分布式事务。Spanner架构,来自Google论文F1,主要用作SQL引擎Spanner主要负责事务一致性、复制机制、可伸缩存储等,Spanner架构中的核心处理模块是Spanserver,即Spanner的架构。Google论文中Spanserver的核心工作分为三个部分:基于Paxos协议的数据复制。关于Paxos协议,可以看我之前写的一篇文章:《用三国杀讲分布式算法,舒适了吧?》Tablet-basedfragmentationmanagement。2基于PC的事务一致性管理。关于2PC协议,可以看我之前写的一篇文章:《用太极拳讲分布式理论,真舒服!》2017年,F1和Spanner分裂,不再是绑定关系。原理如下:来自Googlepaper3.3CockroachDBCockroachDB(蟑螂数据库)是一个可扩展的数据存储系统,支持地理位置处理和事务处理。为什么叫蟑螂?因为只要这个数据库损坏的节点不超过总数的一半,集群仍然可以正常工作,具有超强的生命力。一致性由一个分布式共识算法实例来调节,该实例选择了使用Raft共识算法。所有一致的状态都存在于RocksDB中。Cockroach是一个分布式SQL数据库。主要的设计目标是可扩展性、强一致性和生存性,正如它的名字一样。Cockroach的目标是容忍磁盘、主机、机架甚至数据中心的灾难,同时将停机时间降至最低,并且无需人工干预。Cockroach的节点是点对点的,设计目标之一是部署去中心化的点对点节点,配置最少,没有依赖。中文社区地址:cockroachdb-cn。CockroachDB提供了两种不同的事务特性,包括快照隔离(snapshotisolation,简称SI)和顺序快照隔离(SSI)语义,这是默认的隔离级别。CockroachDB是一个支持ACID事务的分布式K/V数据仓库,多版本值存储是其主要特点。主要的设计目标是全局一致性和可靠性,这一点从蟑螂的命名就可以看出来。蟑螂数据库可以在磁盘、物理机、机架甚至数据中心发生故障时以最小延迟处理服务中断;整个故障过程不需要人工干预。Cockroach的节点是均衡的,其设计目标是同构部署(只有一个二进制包)和最小配置。CockroachDB、TiDB和YugabyteDB都公开声称其设计灵感来自于Spanner,因此它们通常被认为是同构产品。CockroachDB和TiDB经常被大家拿来比较。区别:CockroachDB采用标准的P2P架构。只要损坏的节点不超过总数的一半,集群仍然可以正常工作。CockroachDB支持全球部署,因为它使用了混合逻辑时钟(HLC),所以可以实现全球物理规模的数据一致性。分片管理机制不同。3.4YugabyteDB在架构上与CockroachDB有很多相似之处,比如支持全球部署、采用混合逻辑时钟(HLC)、基于Percolator的事务模型、兼容PostgreSQL协议等。由于相似度高,YugabyteDB和CockroachDB之间的竞争非常激烈。Yugabyte采用两层架构:查询层和存储层。然而,这种架构只是合乎逻辑的。在部署结构中,两层都位于TServer进程中。这与TiDB不同。Yugabyte的查询层同时支持SQL和CQLAPI。CQL是一种兼容Cassandra的方言语法,对应文档数据库的存储模型;而SQLAPI则是直接基于PostgresQL魔改,更好的兼容PG语法,宇嘉的存储层是重头戏。其中TServer负责存储tablet,每个tablet对应一个RaftGroup,分布在三个不同的节点上,保证高可用。Master负责元数据管理,除了tablet的位置信息外,还包括表结构等信息。Master本身也依赖Raft来实现高可用性。YugabyteDBArchitecture3.5阿里OceanBaseOceanBase是蚂蚁集团自主研发的金融级分布式关系型数据库,成立于2010年。OceanBase具有数据强一致性、高可用、高性能、在线扩展、对SQL标准和主流关系数据库的高度兼容等特点,而且成本低。3.6腾讯的TDSQLTDSQL节点全部使用MySQL。它采用分布式集群架构(如下图),灵活性高,简化了各节点之间的通信机制,简化了对硬件的要求。这不仅意味着TDSQL的关系型实例、分布式实例、分析型实例可以混合部署在同一个集群中,也意味着即使是简单的x86服务器也可以像小型机、共享存储等一样稳定可靠地搭建起来.数据库。TDSL架构3.7中兴的GoldenDBGoldenDB几乎是国内银行业最大的分布式数据库。和TDSQL一样,它在数据节点上也是选择了MySQL,但是全局时钟节点的加入让它成为了标准的PGXC架构。3.8腾讯TBaseTBase是腾讯数据平台团队基于开源PostgreSQL开发的企业级分布式HTAP数据库管理系统:具有高性能、可扩展的分布式事务能力,支持RC和RR两种隔离级别;通过安全、管理、审计三权分立的体系,提供完善的数据安全保障机制;支持高性能分区表,数据检索效率翻倍;SQL兼容2003标准、PostgreSQL语法、常用Oracle函数&数据类型、窗口函数等;提供大小商户数据分离、冷热数据分离等高效的数据治理能力。集群中共有三类节点,各自承担不同的功能,通过网络连接成为一个系统。三类节点分别是:**Coordinator:**协调节点,提供对外接口,负责数据分发和查询规划,多个节点位于同一个位置,每个节点提供相同的数据库视图,CN存储系统全局元数据.**Datanode:**处理和存储与这个节点相关的元数据,每个节点也存储一个数据片段。在功能上,DN节点负责完成由执行协调节点分发的执行请求。GTM:全局事务管理器(Globaltransactionmanager.),负责管理集群事务信息,管理集群的全局对象,如序列。此外,GTM不提供其他功能。3.9VoltDBVoltDB官网提供的介绍:VoltDB是世界上最快的内存数据库。它继承了传统关系型数据库的强一致性需求,提供了在互联网云上部署和分布式数据库水平扩展的能力。VoltDB通过将数据库全部存储在内存中,消除了大量的数据和日志磁盘访问操作,并通过单线程的方式消除了磁盘锁和记录锁;通过数据库分片技术,数据库支持高并发请求;通过分布式集群支持数据库横向扩展。其查询速度是传统数据库的100多倍。2019年正式闭源,成为纯商业产品。同时,VoltDB在国内还没有建立完备的服务支撑体系,很大程度上影响了它的推广。3.10SequoiaDBSequoiaDBSequoiaDB是一个开源的金融级分布式关系型数据库,主要为高并发在线交易场景提供高性能、可靠、稳定、无限扩展的数据库服务。逻辑架构用户可以在SequoiaDB中创建各种类型的数据库实例,以满足不同上层应用的各自需求。SequoiaDB支持MySQL、PostgreSQL、SparkSQL和MariaDB四种关系数据库实例,类MongoDBJSON文档数据库实例,以及S3对象存储和POSIX文件系统的非结构化数据实例。支持七种不同的实例类型SequoiaDBSequoiaDBSequoia数据库存储引擎采用分布式架构。集群中的每个节点都是一个独立的进程,节点之间使用TCP/IP协议进行通信。可以在同一个操作系统上部署多个节点,节点之间使用不同的端口来区分。数据库存储引擎的逻辑架构已经准备就绪。对于分布式数据库,如果你也有使用分布式数据库的经验,欢迎留言~参考资料:https://docs.pingcap.com/zh/tidb/stablehttp://vldb.org/pvldb/vol11/p1835-samwel.pdfhttp://ericfu.me/yugabyte-db-introduction/https://blog.csdn.net/duan_zhihua/article/details/88549173https://www.voltdb.com/https://www.zhihu.com/question/24225007/answer/1707736658https://www.zhihu.com/question/24225007/answer/1326259742https://time.geekbang.org/column/article/296558本文转载自微信公众号《悟空聊天》结构”,您可以通过以下二维码关注。转载本文请联系悟空聊天架构公众号。
