根本就没有什么NoSQL,或者人人都是NoSQL!
NoSQL是现在的一个流行词汇。在过去的数十年里,每当人们提到数据库,指的都是关系型数据库,而提到关系型数据库,就不得不提到那个男人——Edgar F. Codd以及他的结构化查询语句(SQL)。想用其他方式存储数据?疯了吧!任何其他方式都只是没有灵魂的文件。
但是,在过去的几年间,人们对此产生了怀疑。将数据以行与列的形式存储在表中真的是表现数据的唯一方式吗?经过不断的思考与编码,出现了一大批新的组织数据的理论,并且开始为此建立新的数据库管理系统。
这些数据库所应用的哲学思想或许有所不同,但是有一件事是相同的,那就是使用结构化查询语句已经不再合适。因此他们使用各自的查询语句替代了结构化查询语句。NoSQL应运而生,作为公然挑战传统关系型数据库模型的标签。
然而,各种NoSQL数据库之间也都各有差别,他们除了都不使用SQL以外,有些甚至找不到其它的共同点。NoSQL也有许多分类。
NoSQL数据库的分类
面向文档的数据库
例子:MongoDB,CouchDB
优势:处理异构数据,进行面向对象的敏捷开发。
它们的优势是它们不需要一致的数据结构。如果你的数据库布局不断变化,或者你处理的数据集虽然是一个整体但看起来还是很不一样,这些数据库就很有用。当你有许多表都包含有两列叫做“key”和“value”,那就值得考虑使用这种数据库。
图数据库
例子:Neo4j,GiraffeDB
优势:数据挖掘
虽然大部分的NoSQL数据库放弃管理数据关系,但这些数据库有时比所谓的关系型数据库更关心数据关系。
它们所关注的是使用数据与其他数据的关系来定义数据。如果你有许多表,它们的主键是另外两个表的主键(或有一些数据定义了它们之间的关系),这种数据库会很适合你。
键-值
例子:Redis,Cassandra, MemcacheDB
优势:根据键快速查找值
它们虽然简单,但胜在快与简单。如果你不需要存储过程,约束,粗发起以及所有其他高级特性,只想快速存取数据,这就是你想要的。
宽列/列族
例子:Hadoop / HBase ,Cloudata,Druid
SQL已死?
当然不是!
虽然有些场景SQL并不适用,但是它也有能发挥优势的地方。许多数据模型依然最适合用SQL表达。
NoSQL并不是SQL的替代品,而是与SQL互补的,每种都有能发挥优势的使用场景。