本节书摘来自异步社区出版社《解读NoSQL》一书中的第1章,第1.1节,作者: 【美】Dan McCreary(丹•麦克雷) , Ann Kelly(安•凯利),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.1 什么是NoSQL
准确定义NoSQL本身就具有挑战性。NoSQL这个术语其实是有待商榷的,因为它并没有真正意义上揭示NoSQL运动的核心主题。这个术语来源于一群定期在湾区开会并讨论一些共同关注的可扩展的开源数据库的人们,它就这样出现了。不管它形不形象,它似乎出现在所有地方:行业期刊、产品说明和各种会议。在本书,我们将用NoSQL区别于传统的关系型数据库管理系统(RDBMS)。
按照我们的目标,我们将从以下几个方面定义NoSQL。
NoSQL是关于快速而高效地处理数据,专注于性能、可靠性和敏捷性的一组概念。
这听起来有些宽泛,是吧?它没有排除SQL或者RDBMS,对吗?这其实并没有错。重要的是,我们需要搞清楚NoSQL背后的核心主题:它是什么,最重要的是,它不是什么。那么NoSQL究竟是什么?
NoSQL 不仅仅是普通意义上的表——NoSQL系统可以从许多格式中存储和检索数据:键值存储、图数据库、列族存储、文档存储甚至是普通的表。
NoSQL避免连接操作——NoSQL系统能够通过简单的接口提取数据从而避免连接操作。
NoSQL 是模式无关的——NoSQL系统允许将数据拖曳到一个文件夹并进行查询,而不需要创建对象-关系模型。
NoSQL 工作在多核处理器之上——NoSQL系统允许将数据库部署在多核处理器之上从而保持良好的性能。
NoSQL 运行在无共享的商用计算机——大多数(并不是所有的)NoSQL系统利用廉价的商用处理器、独立的硬盘和内存进行搭建。
NoSQL 支持线性扩展——当你增加更多的处理器时,你的单位性能增量始终是一致的。
NoSQL 是创新的——NoSQL对于存储、检索、操作数据提供了更多的选择。NoSQL的支持者(也被称为NoSQLers)对于NoSQL和SQL解决方案持一种兼收并蓄的态度。对于NoSQL社区来说,NoSQL的意思是“不只是SQL”。
同样重要的是,NoSQL不是什么。
**
NoSQL 不是一种SQL语言**——NoSQL并不是采用非SQL查询语言的应用。SQL和其他查询语言也可以被用于NoSQL数据库。
NoSQL 不仅是开源的——尽管许多NoSQL系统都有一个开源模式,但是借鉴NoSQL思想的商业产品同样也不排斥开源。你仍然可以通过商业产品创新地解决问题。
NoSQL 不仅仅代表海量数据——大部分但不是所有的NoSQL应用都是来源于为应对海量数据而提升当前应用运行规模的需求。虽然数据的容量和数据处理速度很重要,但NoSQL 也专注于数据的种类和敏捷性。
NoSQL 和云计算没有关系——虽然很多NoSQL系统为了能在负载变化时利用云端动态扩展的优势而部署在云端,但是NoSQL系统也能像在云端运行那样运行在公司的数据中心。
这不是关于如何用好RAM和SSD——NoSQL专注于高效地使用RAM和固态硬盘获得性能的提升,尽管这很重要,但是NoSQL系统可以运行在普通硬件之上。
NoSQL 并不是精英团体的专属产品——NoSQL不是一个排他的、只有少数产品的俱乐部,也并没有为加入设置门槛。想成为一个NoSQLer,你只需说服别人,对于他们的业务难题你有创新的解决思路。
NoSQL应用采用很多数据存储类型(不同的数据库)。有简单的表现键值关系的键值存储、表现关联关系的图存储、用以存储可变数据的文档存储,每一种NoSQL数据存储类型都有其独特的属性和使用场景,如表1-1所示。
NoSQL系统拥有独特的特性能够使其单独使用或者与已有系统配合使用。许多机构认为NoSQL系统这样做的原因是为了克服一些常见的问题,如数据的容量、流动的速度、数据的种类和数据的敏捷性以及NoSQL运动背后的商业驱动所使然。