非关系型数据库¶
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