Bootstrap

【数据库】NoSQL数据库简介

基于自己的理解,对几个常见的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)文档存储,主要用于爬虫相关的数据存储

;