若是你关注大数据科技动向,你对 NoSQL 必定不陌生,NoSQL 是一个分布式数据库。在过去时间,数据存储一直关系型数据库天下,有着良好的控制并发操做、事务功能。虽然RDBMS很优秀,可是随着时间的推移就出现了两个关系数据库解决不了的问题:快速增加的数据规模和日渐复杂的数据模型。结果,咱们看到了 NoSQL 数据库的兴起。数据库
1、关系数据库不足服务器
实际上,从 1979 年 Oracle 发布了第一个版本,这些数据库被设计为在单个服务器上运行,而且越大越好。并且增长这些数据库容量的惟一方法是升级服务器处理器、内存和存储,数据存储代价不断升高。随着互联网的数据呈指数级增加和 Web 应用程序的兴起,数据模型日渐复杂,关系数据库难以支撑,NoSQL 数据库也由此孕育而生。在 2006 年谷歌发布了 Bigtable 研究论文,在 2007 年亚马逊发布了 Dynamo 研究论文。而这些新的数据库旨在知足新一代企业要求:须要敏捷开发并支持任意规模运做。数据结构
2、敏捷开发架构
当今是以体验为中心的数字经济,企业如何保持竞争力,那么必须进行创新。因为这项创新的核心是现代 Web、移动和物联网应用程序的开发,所以开发人员必须高频提供应用程序和服务。速度和敏捷性都相当重要,由于这些应用程序的发展速度远远超过 ERP 等传统应用程序。而关系数据库是却不能很好知足于它,由于它们的固定数据模型不能很好地支持敏捷开发。并发
敏捷开发的核心原则是适应不断变化的应用程序需求:当需求发生变化时,数据模型也会发生变化,这是关系数据库的难以克服的问题,由于关系数据库的模型是固定的,并预先定义好的。所以,当要更改数据模型,开发人员不得不修改当初设定好的数据库结构,以适应新的需求。这会减慢或中止开发,不只由于它是一个手动,耗时的过程,并且还会影响其余应用程序和服务。分布式
相比之下,NoSQL 文档 数据库彻底完美支持这点,由于它是无模式的,没有强制定义数据必须建模。相反,它遵循应用程序和服务。使用 NoSQL,数据模型由应用程序模型定义。应用程序和服务将数据建模做为对象。memcached
3、如何支持任意规模运做性能
为了支持以指数增加的用户和数据 - 数百到数千到数百万用户,以及千兆字节到数TB的数据操做,应用程序和服务不得不进行扩展以保持性能,而且必须有效地运行。大数据
对于扩展关系数据库而言,这是一个问题,例如,使用 Oracle ,使用 RAC 技术进行扩展就须要大量组件,昂贵且不彻底可靠。所以,有效扩展和按需扩展的能力是一项挑战。它会变得愈来愈昂贵,由于必须购买更大更强的服务器以容纳更多用户和更多数据。此外,若是必须使数据库脱机以执行硬件升级,则可能致使停机。设计
然而,分布式 NoSQL 数据库利用廉价硬件进行扩展, 只需添加更多服务器便可添加更多资源。扩展能力使企业可以经过如下方式更有效地扩展:
一、不须要为知足部署而买相对称的硬件
二、利用较便宜的硬件进行拓展;
三、按需扩展,无需停机。
4、NoSQL 常见存储方式
NoSQL 常见有三种存储方式:键值存储、面向文档的数据库和面向列的数据库。接下来讲明这几种存储方式以及数据库表明。
键值存储
表明:Redis、memcached
键值存储是 NoSQL 最多见存储方式,经过 key-value 形式保存数据,高速访问数据。并且根据保存时效也分为临时性、永久性和二者兼备。
面向文档的数据库
表明:MongoDB、CouchDB
面向文档的数据库数据结构要求不是很严格,不定义表结构并且可使用复杂的查询条件
面向列的数据库
表明:HBase
面向列的数据库以列为单位进行存储,这里的列式存储其实说的是列族存储,它将数据表存储为数据列而非行的形式。列族存储优点:快速查询,易拓展,但功能相对局限。
5、NoSQL 对于事务的支持?
在这里有一个误区,因为分布式事务须要分布式协做,因此彷佛必须在性能可扩展性和分布式事务支持之间进行权衡。
耶鲁大学的一名副教授 Daniel Abadi 认为这个想法是错的,可拓展的分布式系统也是能够实现事物。他提出了一个新的权衡策略,具体是在公平性、隔离性和吞吐量(FIT)三者之间进行取舍。
换句话说,有两种方法构建出具有分布式事务吞吐量的可扩展系统:
一、放弃隔离性
当放弃隔离性,一个事物是不会跟其余事物有冲突,就无需等待协做就能够完成了。并且也有一类数据约束能够确保在弱隔离下正确性。
二、放弃公平性
经过设定分布式协做的顺序最小化二者之间的时间重叠,从而减轻两者之间的相互影响,在此公平下找到最合适时间进行协做。
6、小结
构建和运行这些大规模交互式应用程序建立了一组新的技术要求。新的技术架构须要比以往更加灵活,而且须要一种可以适应史无前例的规模、速度和数据可变性的实时数据管理方法。关系数据库没法知足这些新要求,这就使得 NoSQL 逐渐流行起来。