数据库发展至今历经三代更迭:

SQL,传统关系型数据库,例如 MySQL
NoSQL,非关系型数据库,例如 MongoDB
NewSQL,新式关系型数据库,例如Spanner

SQL 的问题

随着互联网的发展以及业务数据量的不断膨胀,互联网应用的用户规模和数据量呈指数级增长,并且要求7X24小时在线。

传统关系型数据库无法满足高性能、高并发、扩展性的要求,在这种环境下通常有2种解决方法:

  • 升级服务器硬件
    虽然提升了性能,但总有天花板。

  • 数据分片,使用分布式集群结构
    对单点数据库进行数据分片,存放到由廉价机器组成的分布式的集群里。

可扩展性更好了,但也带来了新的麻烦。
以前在一个库里的数据,现在跨了多个库,应用系统不能自己去多个库中操作,需要使用数据库分片中间件。
分片中间件做简单的数据操作时还好,但涉及到跨库join、跨库事务时就很头疼了,很多人干脆自己在业务层处理,复杂度较高。

NoSQL 的优势与不足

后来 NoSQL 出现了,放弃了传统SQL的强事务保证和关系模型,重点放在数据库的高可用性和可扩展性。

NoSQL 的主要优势:

  • 高可用性和可扩展性,自动分区,轻松扩展
  • 不保证强一致性,性能大幅提升
  • 没有关系模型的限制,极其灵活

NoSQL 不保证强一致性,对于普通应用没问题,但还是有不少像金融一样的企业级应用有强一致性的需求。而且 NoSQL 不支持 SQL 语句,兼容性是个大问题,不同的 NoSQL 数据库都有自己的 api 操作数据,比较复杂。

NewSQL 特性

NewSQL一词是由451 Group的分析师Matthew Aslett在研究论文中提出的。它代指对老牌数据库厂商做出挑战的一类新型数据库系统。

我们可以简单地把NewSQL理解为:在NoSQL基础上(类似BigTable这种分布式KV系统),加入了事务能力。在传统SQL上集成了 NoSQL 强大的可扩展性。

从实现上来说,主要是SQL+事务+分布式系统。NewSQL的代表是Spanner,相关产品有TiDB,OceanBase,CockroachDB等。

NewSQL具有NoSQL和SQL的特点:

  • 拥有NoSQL的水平扩展能力,存储和计算能力可水平扩展,以应对海量数据
    传统关系型数据库是垂直扩展
  • 写入性能比传统关系型数据库更高,低延时读写,可以应对高并发
    存储引擎上,普遍采用LSM-Tree替换B+Tree,写入性能高。
    传统关系型数据库采用主从架构,主写从读,写入受限于主。NewSQL基于分片,粒度更小,多个主分片副本可以分布到不同机器上,实现多节点写入,也能实现各节点的读写负载平衡。
  • 强一致性和高可用性
    实现RPO=0,RTO足够小。
    分片有多个副本,数据不易丢失。在分片多副本复制的基础上,使用类似Paxos或Raft等共识算法。
    数据一致性方面,目标是因果一致性或者线性一致性。这里的一致性是CAP中的C,指的是数据一致性,是单对象、单操作在多个副本上的一致性,区别于ACID中的C。
    主流NewSQL产品如Spanner,TiDB,OceanBase都实现了线性一致性(最强一致性)。在实现上,需要借助于全局时钟。
  • 拥有传统关系型数据库的事务处理能力(ACID)
    NoSQL不能提供ACID(原子性、一致性、隔离性和持久性)的操作,这也是NewSQL相比于NoSQL最大的区别之一。
    Spanner实现了可串行化隔离级别,TiDB实现了快照隔离级别。
    NewSQL的一致性是数据一致性和事务一致性的融合。
  • 支持标准SQL
  • 架构上每个组件都基于分布式架构
    大部分NewSQL产品由计算节点,存储节点、管理节点组成。分布式的架构也有利于计算和存储分离,便于容器化部署,弹性伸缩(容器化不是NewSQL的特点)

CAP原理:
• Consistency(一致性): 数据一致更新,所有数据变动都是同步的
• Availability(可用性): 好的响应性能
• Partition tolerance(分区耐受性): 可靠性
举例来说在高可用的网站架构中,对于数据基础提出了以下的要求:
• 分区耐受性
保证数据可持久存储,在各种情况下都不会出现数据丢失的问题。为了实现数据的持久性,不但需要在写入的时候保证数据能够持久存储,还需要能够将数据备份一个或多个副本,存放在不同的物理设备上,防止某个存储设备发生故障时,数据不会丢失。
• 数据一致性
在数据有多份副本的情况下,如果网络、服务器、软件出现了故障,会导致部分副本写入失败。这就造成了多个副本之间的数据不一致,数据内容冲突。
• 数据可用性
多个副本分别存储于不同的物理设备的情况下,如果某个设备损坏,就需要从另一个数据存储设备上访问数据。如果这个过程不能很快完成,或者在完成的过程中需要停止终端用户访问数据,那么在切换存储设备的这段时间内,数据就是不可访问的。

CAP原理认为,一个提供数据服务的存储系统无法同时完美的满足一致性(Consistency)、数据可用性(Availability)、分区耐受性(Partition Tolerance)这三个条件

关系型数据库:满足CP,但A不完美;非关系型数据库:满足AP,但C不完美;NewSQL:可以同时满足CAP。

数据库发展至今历经三代更迭:SQL,传统关系型数据库,例如 MySQLNoSQL,非关系型数据库,例如 MongoDBNewSQL,新式关系型数据库,例如SpannerSQL 的问题随着互联网的发展以及业务数据量的不断膨胀,互联网应用的用户规模和数据量呈指数级增长,并且要求7X24小时在线。传统关系型数据库无法满足高性能、高并发、扩展性的要求,在这种环境下通常有2种解决方法:升级服务器硬件虽然提升了性能,但总有天花板。数据分片,使用分布式集群结构对单点数据库进行数据分片,存放到由
在正式开始前,我先问一个问题:你们熟悉 数据库 吗?另外,有谁知道My SQL 吗?那么,现有 数据库 存在哪些问题呢?像My SQL 、Oracle、Postgre SQL 这样的关系 数据库 ,它们的问题是很难扩展。尽管我们有分片技术,还有youtube/vitess和My SQL proxy等,但它们都不支持分布式事务以及cross-nodejoin连接。像HBase、MongoDB以及Redis这样的No SQL 数据库 :它们可扩展,但不支持 SQL ,同时也舍弃了事务的一致性。因此,新一代 数据库 将会是怎样的?在我看来,其主要特征应该是:支持 SQL ;具有可扩展性;支持事务执行四要素/ACIDTransaction;
谷歌分布式三宝 BigTable、GFS、MapReduce这传说中的谷歌分布式三驾马车,虽然谷歌没有公开具体实现代码,但却公布了相应论文,对分布式文件系统、大数据挖掘和No SQL 流行起了重大促进作用,开源界相对应产品是Hbase、HDFS、Hadoop;距谷歌这三篇论文发表已近10年,谷歌内部这三驾马车也在更新换代: BigTable--MegaStore...
VoltDB是一个革命性的新型 数据库 产品,被称作 New SQL 数据库 。它基于H-Store,号称比当前 数据库 产品的吞吐量高45倍,同时又具有很高的扩展性。它的特性主要有以下几点: 高吞吐、低延迟:通过内存计算,存储过程和串行数据访问实现。 可扩展性:自动分区和复制,保证性能和可扩展性。 高可用性:同步的多主复制(在VoltDB中叫K-safety)。 持久化: 数据库 快照与命令
从 My SQL 到 TiDB 如今的 数据库 种类繁多,RDBMS( 关系型数据库 )、No SQL (Not Only SQL )、 New SQL ,在 数据库 领域均有一席之地,可谓百家争鸣之势。那么我们为什么要学习使用TiDB呢?接下来就从我们最熟悉的My SQL 的使用说起!
近几年来, 数据库 领域出现了一种新的关系 数据库 类型,称为 New SQL ,例如,Google的Spanner,Amazon的Aurora等等,这些 数据库 相对于传统 数据库 来讲,区别在哪里?What's Really New with New SQL ?给了很好的总结,本篇文章主要是总结该论文的观点,最后会有一个简单的讨论部分,全文的组织结构如下: 为什么需要 New SQL New SQL 的分类 New SQL 的...
(1)关系 数据库 所采用的二维表格数据模型不能有效地处理多维数据,不能有效处理互联网应用中半结构化和非结构化的海量数据,如Web页面、电子邮件、音频、视频等。 (2)高并发读写的性能低 关系 数据库 达到一定规模时,非常容易发生死锁等并发问题,导致其读写性能下降非常严重。 Web2.0网站 数据库 并发负载非常高,往往要达到每秒上万次读写请求。 关系型数据库 勉强可以应付上万次 SQL 查询,但硬盘I/O往往无
前面探讨了 No SQL 数据库 的相关技术,No SQL 数据库 能够很好地应对海量数据的挑战,为用户提供可观的可扩展性和灵活性,但是它也有缺点: No SQL 数据库 不支持 ACID 特性, 在很多场合下,ACID 特性使系统在中断的情况下也能够保证在线事务的准确执行; 大多数 No SQL 数据库 提供的功能比较简单,这就需要用户在应用层添加更多的功能; No SQL 数据库 没有统一的查询语言,不支持 SQL 查询,这也在一定程度上增加了开发者的负担。 为了解决上述难题, New SQL 数据库 应运而生。 New SQL
以下是本人对于原文的一些看法: 1.传统的 关系型数据库 确实有非常强大的结构能力,但是不可否认,它只是在处理结构化数据的时候,才有优势。而文中清晰的指出,在企业中的业务数据只有25%是结构化数据。那么,企业的75%怎么处理呢? 2.非结构化数据也可以使用 关系型数据库 处...
很多企业都需要处理来自多个数据源的复杂数据,因此需要利用 数据库 管理系统来存储和管理数据。现在,有很多不同类型的 数据库 系统,而找到一个正确的 数据库 不是一件容易的事。这需要考虑业务需求,以便选择正确的 数据库 管理系统。 企业使用关系 数据库 管理系统(RDBMS)来存储和管理他们的数据。然而,这些系统无法处理海量的复杂数据,无法满足当今 数据库 用户的需求。因此,很多企业都在寻找能够在保持传统 数据库 系统重要特性的同时,也能提供可伸缩性、可用性和高性能的 数据库 系统。 数据库 软件供应商也已经确定了这一需求,并开发了 New SQ
SQL 作为主要的数据存储方式已经超过40年,并且经历了至少两个指数扩张期:20世纪90年代Web应用程序崛起之后,以及在过去十年中由于移动设备爆炸引起的扩张。 因此,越来越小的公司开始发现使用 数据库 的好处,而像Google这样的互联网巨头则已经将数据单位上升到PB或甚至EB。 在 SQL 的发展过程中,产生了许多迭代产品,其中最重要的是 SQL ,No SQL New SQL — 它们一起负责绝大部分的数...