NewSQL数据库探秘

SQL关系型数据库

数据库重难点集锦

NoSQL

键值型

键值数据库的代表是Redis,面对通过主键查询的场景,Redis的效率非常高,但对于内容的查询,则无能为力。分布式只能靠根据主键进行分片,不支持ACID事务。

文档型

文档数据库的代表是MongoDB,查询灵活,拥有自由度极高的Schema模型,可以方便的与JSON数据映射,不支持ACID事务。

列式存储型

HBase用于处理海量数据,不支持ACID事务,并且只能通过行键来查询数据。

NewSQL

NewSQL is a class of modern relational database management systems that seek to provide the same scalable performance of NoSQL systems for online transaction processing (OLTP) read-write workloads while still maintaining the ACID guarantees of a traditional database system.

一种新式的关系型数据库管理系统,具有以下特性:

  1. 针对OLTP(读-写)工作负载,追求提供和NoSQL系统相同的扩展性能
  2. 保持ACID和SQL查询等关系数据库特性

目前业界最流行的分布式数据库有三类:新架构(New Architecture)、透明化分片中间件(Transparent Sharding Middleware)和云数据库(Database-as-a-Service), 2016年Andrew Pavlo与Matthew Aslett发布了一篇论文专门讲述NewSQL,What’s Really New with NewSQL?新架构以Google Spanner为代表(Shared-Nothing),云数据库以AWS Auraro为代表(Shard-Disk),透明化中间件以Sharding-Proxy(Shared-Nothing)为代表,下文我们一一阐述。

新架构

  1. 主要产品代表为Spanner、TiDB、CockroachDB、OceanBase、TafDB、X-DB
  2. 主要特点包括弹性扩展、分布式事务、基于Raft/Paxos的多副本复制技术保证一致性、故障容灾高可用;一般会包括master主备节点管理集群元信息、调度数据、负载均衡、分配全局事务ID,SQL节点负责接受用户的SQL并解析以及其它计算工作、访问master元信息去找到存储数据的节点,KV节点负责存储一致性多副本数据(像OB还会把存储节点分为基准数据节点和增量数据节点, 增量数据节点和master共用)。

透明化分片中间件

增加一层proxy,隐藏分库分表的细节,包括MyCat等中间件系统。其实后端还是单机节点中一个MySQL实例内核同时负责存储和计算(Shared-Nothing)。

云数据库

  1. 主要产品代表为Auraro、PolarDB。
  2. 主要特点为计算和存储分离:计算节点基于MySQL内核,并提供主计算节点和多个只读节点来进行容错,计算节点通过RDMA与存储节点连通解决IO性能问题,存储节点基于Raft或者Quorum来做多副本存储,存储其实是共享的(多个数据库实例共享一个分布式存储层)。

数据库构架三种设计模式

Shared Everthting

就是指单机所有资源全部共享,一般是针对单个主机,对外完全透明共享本机的CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer。

Shared Nothing

各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。MySQL Proxy和Google Spanner也是Shared Nothing,只需增加服务器数就可以增加处理能力和容量。

Shared Disk

各个处理单元使用自己的私有CPU和Memory,共享磁盘系统,它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。当存储器接口达到饱和的时候,增加节点并不能获得更高的性能。