NoSQL已死,NewSQL+当立(第一期)!!!

NoSQL

NoSQL一词最早出现于1998年,用于命名一个轻量级关系数据库。该数据库使用文本文件存储数据,每个元祖由制表键分割的字段组成,使用shell脚本访问数据,不支持SQL接口,但仍然是关系数据库。2009年,NoSQL一词出现于一个技术大会上,用于表示当时出现的大量非关系型分布式数据存储系统,这也是当前NoSQL一词的含义。然而,NoSQL一词没有广为接受的官方定义,它在不同的场合被解释为不同的意思,包括“No to SQL”、“NOSQL/Not Only SQL”、“No, SQL”等,现在广泛使用的含义为Not Only SQL,即SQL数据库的一种补充。在新千年的第一个十年,数据处理领域最令人瞩目的变化是各种NoSQL数据库如雨后春笋般涌现,呈现出百花齐放、百家争鸣的局面。根据nosql-database.org在2018年的统计数据,共有超过225个NoSQL产品,这种情况的出现有鲜明的时代背景。

随着数据量的快速增长,互联网公司面临两种选择:垂直扩展(Scale Up)或者水平扩展(Scale Out)。垂直扩展指采购功能更强大的机器解决问题,这也意味着要有更大的资金投入,且这种投入增长不是线性的。而水平扩展则是通过购买更多的商用硬件组建集群来解决扩展问题。水平扩展方案也带来了新的问题,虽然从20世纪80年代开始,学术界和企业界就对分布式数据库进行研究和开发,但当时还没有可以很好地支持集群的商用事务型关系数据库这种关系数据库和分布式集群的不匹配,使得互联网巨头和大企业不得不考虑其他存储方案。早期的尝试之一是使用基于中间件的方案,包括eBay的基于Oracle的集群和谷歌的基于MySQL的集群。中间件方案的底层大多使用某种关系数据库,而关系数据库自身的特性(如ACID)限制了性能和可用性,使用关系数据库做底层存储代价过高。于是,某些公司开始尝试改变这一状况,很多新技术和产品应运而生。这些新产品放弃了ACID、模式(Schema)和跨节点关联等关键SQL特性,以获得对海量数据的高速处理能力、高扩展性和到可用性等。谷歌2003年发表了GFS论文、2004年发表了MapReduce论文、2006年发表了BigTable论文;亚麻于2007年发表了Dynamo论文;雅虎于2006年开源了Hadoop;Facebook于2008年开源了Cassandra。这些研究和技术为NoSQL的发展奠定了良好的基础。其他很多知名NoSQL产品也是在这一时期开始研发或者发布的,包括CouchDB(2005)、MongoDB(2007)、Hypertable(2008)、Cassandra(2008)、Redis(2009)、ElasticSearch(2010)等。

关系模型出现以来就存在对象和关系模型不匹配的问题。存储和处理数据的关系模型本质上是一个扁平的二维数据结构,不支持灵活的嵌套,而编程语言在内存中的数据结构通常是具有多级嵌套的结构体或者对象。这种内存和外存数据模型的不匹配使得开发人员不得不实现大量繁琐的代码进行转换,不但影响开发效率,而且容易出错。另一个问题是修改应用数据结构之前通常需要修改数据的模式,这在需要频繁更新数据结构的场景下非常不方便。这也就是会出现如Hibernate、MyBatis等ORM(object relation mapping)框架的原因。

NoSQL产品数量众多,出现时机和原因不相同,应用场景也多种多样,但这些产品之间存在一些共性。

  1. NoSQL数据库(开始时)不提供SQL接口。某些NoSQL数据里提供了类SQL接口,然而都没有达到SQL标准的能力。
  2. 集群基因。NoSQL数据库大多具备良好的集群管理能力,有的NoSQL最初就是为集群而设计,因而具备很好的线性扩展性和高可用性。
  3. 追求高性能和高吞吐量。NoSQL数据库大多以追求高性能、高吞吐量和高可用性为目标,因而放弃了某些关系数据库的特性,如事务、强一致性、关联等。
  4. NoSQL数据库的数据模型都是非关系型的,常见的数据模型有键值、列簇、文档类型和图类型。
  5. NoSQL数据库不使用模式(Schemaless)或者使用灵活的模式。因此,NoSQL数据库不需要事先设计完善的模式即可操作数据,并允许动态添加新数据类型或者修改已有数据类型。

NewSQL

2017年,谷歌发表了一篇名为《Spanner:Becoming a SQL System 》的论文,引发了关于SQL回归的热议。既然NoSQL可以弥补关系型数据库缺失的场景,那又为何谷歌会发表这篇论文呢?主要问题如下:

  • 数据价值越来越大,大量结构化数据通过标准SQL访问是未来数据分析处理的必然要求。
  • 不支持SQL就不具备高度结构化查询等特性。
  • 存在大量数据必须强一致性的应用场景,比如金融领域的转账。
    因此在NoSQL的基础上,NewSQL新增核心特性如下:支持SQL接口支持分布式ACID计算存储分离。到这里我们也就知道了NewSQL应该具有的特性,即模式自由、高性能、高可用、水平可扩展、支持SQL接口、支持分布式ACID、计算存储分离。
    典型的NewSQL有Google Spanner & F1 、Apple FoundationDB、PingCAP TiDB等
    但是NewSQL也会有相应的问题,比如支持的SQL语句有限、网络传输开销增加、交互时延增加
    支持SQL接口有限:存储节点是分布式K-V系统,这就导致范围查询,关联查询等部分SQL语句支持不够友好,甚至不支持。侧重OLTP,对OLAP支持度不够,比如全局的统计支持较差。
    时延增加:常见的分布式一致性算法Raft、Paxos等,都是基于消息,并且需要服务端间多次交互,增加响应延时。
    计算存储分离:计算节点对外提供标准SQL接口,把SQL请求转换为KV操作,并实现传统关系型的schema、table、column和index等语义。存储节点实现分布式KV系统、维护数据路由、实现分布式事务ACID语义。计算存储分离后,计算节点和存储节点间存在网络交互,增加了系统间网络传输;计算存储分离后,增加了系统层次和维护的复杂性。

NewSQL+

NewSQL+不仅具有NewSQL的特征,还具有新型硬件、云化、安全、AI等核心特性。新型存储硬件NVM读时延和DRAM相近,写延时150ns、新型网络硬件RDMA写远端的时延在us级别,动摇了传统分布式系统中存储与通信的条件假设。新型硬件的出现不仅大大降低了NewSQL因为计算存储分离增加的网络传输时延,而且通过新的分布式一致性算法,也解决了NewSQL因为支持ACID导致时延加大的问题。安全方面,个人隐私保护、新硬件和技术的出现也会带来新的安全挑战。云计算具有弹性弹性扩容、按需使用、按量付费、成本低等明显优势。2019年6月18日,市场研究机构IDC公布最新数据,2019年Q1中国市场物理机出货量下跌0.7%,全球市场物理机销量下跌5.1%,这背后是企业全面向云转移,新旧IT交替出现拐点,中国云计算市场持续强劲增长,平均增幅达40%。一个云化的,大规模的分布式系统,也越来越复杂,运维成本越来越高,智能化运维势在必行。

看了这么多标题党的博文,今天我也来输出一下焦虑。求大佬轻喷,就是想学习学习什么样的套路才能写成热门的博文。关于NewSQL+涉及的相关方面的进展和基础知识请看下期博客。\\^ w^//

参考:
现有数据库简介2019年
图数据库-读书笔记
MongoDB权威指南读书笔记——概念
Redis入门:Redis实战读书笔记

你可能感兴趣的:(数据库)