跳转至

非关系型数据库

NoSQL 泛指非关系型数据库,并没有统一的架构和标准语言

之所以出现 NoSQL 是因为随着数据规模越来越大,关系型数据库无法满足快速查询和插入数据的需求

NoSQL 通过降低数据的安全性,减少对事务和复杂查询的支持,以此获取性能上的提升

但随着数据库不断地发展,发现越来越离不开 SQL,所以现在 NoSQL 的 DBMS 也会实现类似 SQL 的功能,而 NoSQL 的含义也以在不断改变

1970:NoSQL = We have no SQL
1980:NoSQL = Know SQL
2000:NoSQL = No SQL!
2005:NoSQL = Not only SQL
2013:NoSQL = No, SQL!

每种数据库之间差异较大,各有所长,常见的非关系性数据库有以下几种

键值型数据库 Key-value

  • Redis
  • Memcached

键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。

Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,同时缺点也很明显,它无法像关系型数据库一样自由使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。

应用场景:内容缓存、用户信息比如会话、配置信息、购物车等,主要用于处理大量数据的高访问负载。

文档型数据库 Document

  • MongoDB

文档型数据库,最像 RDBMS 的 NoSQL,以文档的形式储存,类似 JSON,是一系列数据项的集合,一个文档就相当于一条记录。

应用场景:日志、 Web 应用等

列存储 Wide column

  • Cassandra
  • Hbase

列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O,适合于分布式文件系统,不足在于功能相对有限。

应用场景:日志、 分布式的文件系统(对象存储)、推荐画像、时空数据、消息/订单等。

图形数据库 Graph

  • Neo4j

图形数据库,利用了图这种数据结构存储了实体对象之间的关系。

最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。

应用场景:社交网络,推荐系统等,专注于构建关系图谱。

搜索引擎 Search engine

  • Elasticsearch
  • Splunk
  • Solr

搜索引擎也是数据库检索中的重要应用。

虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低,搜索引擎的优势在于采用了全文搜索的技术,核心原理是倒排索引。

时间序列 Time Series

  • Kdb
  • InfluxDB
  • Graphite
  • Prometheus

一种针对处理时间序列数据进行优化的数据库管理系统,每个条目都与一个时间戳相关联,旨在高效收集、存储和查询高交易量的各种时间序列。

提供了一种类似 SQL 的查询语言,称为 InfluxQL