NoSQL 即 Not Only SQL,泛指非关系型数据库。一般 NoSQL 数据库通过 key-value 形式存储,使得其具备更强的扩展能力。
NoSQL 简介
NoSQL 通常用来解决系统的性能瓶颈。
NoSQL 一般会有如下特点:
- 不遵守 SQL 标准
- 不支持 ACID 事务
- 复杂查询性能往往很高
NoSQL 有如下适用场景:
- 对数据高并发地读写
- 对海量数据的读写
- 高可扩展性
NoSQL 也不适用以下场景:
- 需要支持 ACID 事务
- 对数据准确性、可靠性要求极高
常用 NoSQL
NoSQL 家族很大,下面列举一些常见到的。
Memcache
Memcache 是高性能的分布式内存缓存服务器。
- 相对出现较早的 NoSQL 数据库
- 数据都在内存中,不支持持久化
- 仅支持简单的 key-value
- 一般作为缓存使用
Redis
Redis 是一个 key-value 存储系统。
- 几乎支持 Memcache 的所有功能
- 数据都在内存中,支持持久化
- 支持多种数据格式
- 一般作为缓存使用
MongoDB
MongoDB 是高性能的文档型数据库。
- 数据在内存中,内存空间受限时将数据存储到硬盘
- 整体上是 key-value,但 value 支持复杂查询
- 支持二进制数据及大对象
- 一般用来存储非结构化数据
HBase
HBase 是 Hadoop 项目中的数据库。用于需要对大量数据进行随机、实时读写操作的场景。
HBase 的目标是处理数据量非常庞大的表,使其可以用普通计算机处理 10亿规模的数据。
Neo4j
Neo4j是一个高性能的 NoSQL图形数据库,它将结构化数据存储在网络上而不是表中。
- 嵌入式的、基于磁盘存储
- 支持2PC分布式ACID事务
- 数据存储在图(网络)中而不是表格中
DB-Engine 数据库排名
DB-Engines 排名从多个维度计算各个数据库系统的流行程度,每月更新一次排行榜。
Redis 概述
Redis(Remote Dictionary Server
),即远程字典服务,是一个开源的使用 C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
Redis 主要特点
- Redis 是一个开源的key-value 存储系统
- Redis 支持的数据类型包括 string、list、set、zset、hash 等
- Redis 支持添加、删除、修改元素的诸多原子操作
- Redis 数据都放在缓存中
- Redis 支持数据持久化到磁盘
- Redis 支持集群部署的高可用
Redis 应用场景
- 热点数据缓存,减少关系型数据库压力
- 分布式架构中 session 共享
- 分布式架构中,分布式锁