写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

NoSQL,泛指非关系型的数据库。
NoSQL是 Non-relational SQL或者Not Only SQL的英文简写,是不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL代表了一系列的、不同类型的相互关联的数据存储与处理的技术的集合。 
NoSQL与RDBMS显著的区别是NoSQL不使用SQL作为査询语言。其数据存储不使用固定的表格模式,具有横向可扩展性的特征。

补充

为什么需要NoSQL?

随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

NoSQL数据库的特点

  1. 运行在服务器集群上。
  2. 不需要预定义数据模式和预定义表结构。
  3. 无共享架构,将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
  4. 将数据进行分区,分散存储在多个结点。并且分区的同时还要做复制。这样既提高了并行性能,又可以避免单点失效的问题。
  5. 设计了透明横向扩展。可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

NoSQL数据库分类

  1. 键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。 Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果数据库管理员(DBA)
只对部分值进行查询或更新的时候,Key/value就显得效率低下了。

  1. 列存储数据库

这部分数据库通常是用来应对分布式存储的海量数据。

列存储是以列为单位来存储数据,最大的特点是如果列值不存在就不存储, 能够避免浪费空间。列存储从第一列开始,到最后一列结束。

列存储的读取是列数据集中的段或者全部数据,写入时,一行记录被拆分为多列,每一列数据追加到对应列的末尾处。

  1. 文档型数据库

文档型数据库的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。

文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。

  1. 图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。

NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。

NoSQL分类对比

分类Examples举例典型应用场景数据模型优点缺点
键值(key-value)Redis内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等Key 指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra, HBase分布式的文件系统以列或列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库MongoDBWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库Neo4J社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

Q.E.D.


大数据开发工程师,精通 Spark,擅长 Java 和 Scala