新车
sql数据库开发(数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程)
数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

责编 | 唐小引

出品 | CSDN(ID:CSDNnews)

这与近两年来以 Google F1 理论为代表的 NewSQL 数据库一起,形成了数据库在这个时代的两支牛角,气势如虹地改变着 TI 数据中心架构的新世界。我们今天就来“庖丁解牛”一把,看看两种技术路线的不同之处。

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

PostgreSQL 是一个功能强大的开源对象关系型数据库系统,它使用和扩展了 SQL 语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL 的起源可以追溯到 1986 年,作为加州大学伯克利分校 POSTGRES 项目的一部分,并且在核心平台上进行了 30 多年的积极开发。直到 2019 年 9 月,已经正式发布到了 12 版本。

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

Michael Stonebraker,2014 图灵奖获得者,PostgreSQL 数据库创始人。目前数据库领域一共有四位获得图灵奖:

  • 1981 年 Codd(关系数据库)

  • 伯克利分校是 Postgres 的摇篮

    PostgreSQL 的特点可以用以下这张图来概括,PostgreSQL 的架构最合适做企业级数据库。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    述说完了 PostgreSQL 的历史,我们来聊聊 PostgreSQL 在开源社区世界的发展,我们知道,数据库近 40 年来的发展,基本上是从 RDBMS 到 OLTP/OLAP 分离,再到分布式数据库发展的这样一个历程。

    分布式 PostgreSQL-X2 架构介绍

    首先,X2 是基于 PostgreSQL 源代码改造成的分布式数据库,所以几乎拥有与单机数据库的所有功能:

    • 全局事务的强一致性;

    • 几乎支持所有单机数据库的 DDL 语句;

    • 支持跨节点的存储过程。

    再次,X2 针对 OLAP 是 shared-nothing 架构,所以是一种 MPP 的技术原理,可以实现 ETL 的数仓加工。

    从上图的 X2 架构我们可以看到,X2 主要由三个部分组成:

    • Coordinator:存储全局的元数据,接受用户请求,负责生成并执行全局查询计划(全局查询计划由若干局部查询计划组成,执行时将局部查询计划分发给 datanode);

    • 分布式 PostgreSQL-X2 的 CAP 分析

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      首先,在一致性上,PostgreSQL-X2 采用 GTM 来实现:

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      2PC 又称两阶段提交(two-phase commit protocol),2pc 是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和 N 个参与者节点(partcipant)。

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      客观上,我们认为它就是乐观锁的一整个实现方式,就是每行都有版本号,保存时根据版本号决定是否成功。

      Postgres-X2 符合分布式数据库线性扩展的标准,在 x86 横行的时代,通过横向对机器的方式扩展计算资源和存储资源是分布式的核心理念,在这一点上,Postgres-X2 也是这么做的。

      再一个,不能够很好地支持在线热插拔,热添加。如果新增节点,需要做停机重启,这样的话,实时 ODS 这一类的应用就不能够在 Postgres-X2 构建的 OLAP 上应用。

      上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。这种情况,目前主要是大型云厂商如:Amazon QWS S3、Google Spanner 和阿里云的 Oceanbase 去着重打造。Postgres-X2 我们只从数据中心的高可用性上探讨:

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      以上,我们算是比较全面的了解了 PostgresSQL 和他的分布式项目 Postgres-X2,我们可以总结一下:

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      我们已经提到数据库已经可以分为几类有:

      数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

      RDBMS——关系型数据库的优点是:事务、索引、关联、强一致性,其缺点是:有限的扩展能力、有限的可用性、数据结构取决于表空间;

    • NoSQL——超越关系型数据库,数据库其优点在于扩展性强、可调一致性、灵活的数据结构,而缺点是事务支持差、索引支持差、SQL 支持差。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    其次是 NoSQL 数据库及专用型数据库,其主要用于存储和处理非结构化或半结构化数据(如文档,图,时序、时空,K-V),不强制数据的一致性,以此换来系统的水平拓展、吞吐能力的提升。

    除了数据的核心引擎之外,还有数据库外围的服务和管理类工具,比如数据传输、数据备份以及数据管理等。

    索引,无法有效使用索引 —>Ad Hoc Query;

  • SQL 以外的分析查询 —>Data Science / Machine Learning;

  • 交互式分析—>复杂 SQL 查询的性能问题。

要说 NewSQL 数据库,我们要先从 Google 的 F1/Spanner 大规模分布式数据库说起。

和众多互联网公司一样,在早期 Google 大量使用了 Mysql。Mysql 是单机的,可以用 Master-Slave 来容错,分区来扩展。但是需要大量的手工运维工作,有很多的限制。因此 Google 开发了一个可容错可扩展的 RDBMS——F1。和一般的分布式数据库不同,F1 对应 RDMS 应有的功能,毫不妥协。起初 F1 是基于 MySQL 的,不过会逐渐迁移到 Spanner。

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

7×24 高可用。哪怕某一个数据中心停止运转,仍然可用;

  • 可扩展;

  • 事务提交延迟 50-100ms,读延迟 5-10ms,高吞吐。

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    Spanner 是个可扩展、多版本、全球分布式还支持同步复制的数据库。他是 Google 的第一个可以全球扩展并且支持外部一致的事务。Spanner 能做到这些,离不开一个用 GPS 和原子钟实现的时间 API。这个 API 能将数据中心之间的时间同步精确到 10ms 以内。因此有几个核心的功能:无锁读事务,原子 schema 修改,读历史数据无 block。

    二、F1 Query 对于 NewSQL 的奠基

    一是,多种异构的存储平台(Bigtable,Spanner,Google Spreadsheets 等)共存;

  • 三是,复杂的商业逻辑开始需要实时的分析和数据处理(HTAP)。

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    第一,它是独立计算层,底层对接了不同的数据源;

  • 第三,它也是一个完整的 ETL 平台;

  • 第五,Shading-nothing,这个之后会详细介绍。

  • 三、NoSQL 谢幕,NewSQL 登场

    NewSQL 是指这样一类新式的关系型数据库管理系统,针对 OLTP(读-写)工作负载,追求提供和 NoSQL 系统相同的扩展性能,且仍然保持 ACID 和 SQL 等特性(scalable and ACID and (relational and/or sql -access))。

    通过上文我们可以知道,NewSQL 的优势在于 SQL 的支持能力、扩展性、实时性和事务的处理能力。在 NewSQL 蓬勃发展的前提下,许多新兴技术公司开始打造自己的新一代分布式数据库,其设计理念:

    通过主节点下发任务的模式,每个节点都可以提供服务,在扩展性上,Master 不会是瓶颈。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">
    • 主服务节点收到服务请求进行分析处理,分配到不同的分配服务节点执行;

    • SQL 执行服务底层存储数据进行处理访问,并反回处理结果;

    • 存储根据 AP、TP 分为共享存储和非共享存储。

    二、从分库分表走向 Sharding 与 Partition(分片与分区)

    数据分区

    什么时候考虑使用分区呢?当一张表的查询速度已经慢到影响使用的时候,数据量大,SQL 经过优化,表中的数据是分段的,或者对数据的操作往往只涉及一部分数据,而不是所有的数据。

    数据分片

    分布均匀,即每台设备上的数据量要尽可能相近;

  • 扩缩容时产生的数据迁移尽可能少。

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    目前主流的 NewSQL 数据库的数据同步是基于 Raft 协议的。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    Leader:负责接收客户端的请求,将日志复制到其他节点并告知其他节点何时应用这些日志是安全的;

    Follower:负责响应来自 Leader 或者 Candidate 的请求。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">
    • 超时时间内没有收到 Leader 的请求则转换为 Candidate 进行选举;

    • Leader 在收到更高任期的请求后转换为 Follower。

    所有一致性算法都会涉及到状态机,而状态机保证系统从一个一致的状态开始,以相同的顺序执行一些列指令最终会达到另一个一致的状态。

  • 在这一点上,PostgreSQL-X2 的架构是以主备的模式来确定的。

    事务开始,记录事务唯一 ID,执行操作,记录修改的 shard,执行预提交动作,提交或回滚;

  • 读取使用快照读取,存储层每次写入都是追加写入,通过覆盖机制进行数据变更。

  • 五、存储层——KV 存储

    堆存:数据可以通过 key 获取,同时可以直接读取数据;

  • 非堆存储只能通过 key 来获取数据,会导致不断的离散的读取,所以不能适应于 AP 的场景。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">
    • 主服务节点收到服务请求进行分析处理,分配到不同的分配服务节点执行;

    • SQL 执行服务底层存储数据进行处理访问,并反回处理结果;

    • HDFS 持久化底层存储数据,并利用三副本技术保证数据不丢失。

    六、多源异构与数据邦联

    在多源异构方面,PostgreSQL 是通过 FDW 支持多源异构,可访问 Oracle、PG、MySQL、MongoDB 等,对 Hadoop 体系和 NoSQL 支持力度低,效率和性能也较难做到极致。

    综合以上六点,通过对 NewSQL 的:

    • 数据的分区分片;

    • 分布式事务;

    • 数据库多源异构。

    最后,将 Hubble 作为代表与 PsostgreSQL-X2 做一个横向分析,能够帮助我们更好地理解本文开篇所言 —— 分布式数据库的两支牛角各自的技术路线。

    数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程nerror="javascript:errorimg.call(this);">

    开源激荡 30 年:从免费社区到价值数十亿美元公司

    GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路

    大促下的智能运维挑战:阿里如何抗住“双11猫晚”?

    很用心的为你写了9道MySQL面试题,建议收藏!


    顶一下()     踩一下()
  • 热门推荐

    发表评论
    0评