基于自己的理解,对几个常见的NoSQL数据库进行一下简单介绍,如有描述错误的,欢迎指正
一、数据库分类
数据库分两大类:SQL数据库和NoSQL数据库
SQL数据库
常用的有
Mysql、Oracle、MSSQL、DB2等,这些大家应该都比较熟悉,都是SQL查询,语法大同小异。
NoSQL数据库
NoSQL数据库与传统的SQL数据库不同,SQL数据库是按行存储数据的,而NoSQL数据库按数据存储结构分以下四类:
类型 | 其中的扛把子 |
---|---|
键值数据库 | Redis |
列族数据库 | Hbase |
图数据库 | neo4j |
文档数据库 | MongoDB |
二、几类常用NoSQL数据库简介
1、Redis
Redis算是这几类之中最常见的了,因其高速的特点,常用作缓存。
为什么Redis速度贼快?
- 数据在内存,读写都在内存,速度远超从磁盘读写(会异步持久化到磁盘,不会关个机就数据全丢)
- 单线程读写,不会有多线程频繁切换上下文或者抢资源造成的额外开销(只是读写单线程,持久化之类的操作还是其他线程在做的)
- 非阻塞的多路复用,提高线程工作效率(这个不太好解释,类似你到某个地方去修手机(维修中心只有一个人),有个人A排在你后面,维修中心的工作人员接待你进行登记之后,然后需要你再提供发票;你回家去拿发票,维修中心的工作人员不会一直等着你,而是会暂时对A提供服务,等你回来了就暂停对B的服务,继续对你的服务,等你这边结束了再继续A的)
应用场景
- 高并发读写场景下,对某些不经常变更的信息做缓存,避免直接访问数据库(需要注意缓存穿透、雪崩)
- 分布式锁
- 计数(例如商品秒杀的计数,并发或多线程情况下需要注意是否算错)
- 保存session 等
2、Hbase
Hbase主要是应用于大数据方向,搭建在大数据平台上,结合分布式文件系统HDFS使用;
Hbase的数据结构
- 数据是如何存储到文件的?
其特点是以列族为文件来存储数据,有多少个列族就有多少个文件,以Hfile压缩存储到HDFS
在存储数据前会根据rowKey进行数据排序,而查询数据时,是根据rowKey+列族|字段去查询数据的,因此在Hbase中,对于rowKey如何定义很重要,好的rowKey设计,能够大大提高数据的查询效率 - 每个行列的cell带了哪些信息?
rowKey(用于定位数据)
字段值
时间戳(cell数据发生变更,不会覆盖旧数据,而是会生成一个带新的时间戳的记录,可设置保留多少条旧记录或者多少天的)
Hbase的应用
- 主要是在数仓或分析平台,进行海量数据的分析处理
3、neo4j
neo4j是一个图数据,是用于存储各种关系,主要用于社交推荐、关系透视啥的
例如:你跟你前女友存在关系,你现女友跟你存在关系,某社交软件把你前女友推荐给现女友,就是通过图数据找到他俩之间存在关系的
neo4j的特点
- 单一纯粹,就是存储和找关系的,在查询关系上有着SQL数据库无法比拟的速度
- UI界面好看,真的好看
存储结构
- neo4j是将定长的信息和非定长的信息分开存储的
- 链式存储,节点是单向链表,关系是双向链表
4、MongoDB
这个没用过,只知道是BSON(二进制json)文档存储,主要用于爬虫相关的数据存储