NoSQL数据库平时听得也比较多,传统的关系型数据库(如Sql server、Oracle、MySQL)我们日常中经常用到,像其它的一些数据库(如Redis、MongoDB)也有接触,但对非关系型数据库NoSQL这块没有个整体的概念,之前也了解过这块的内容,但印象不深。好记性不如烂笔头,今天温故整理下。
01
—
NoSQL
NoSQL是Not Only SQL的缩写。算是非关系型数据库的称呼吧,并不是指某一种具体的数据库应用。NoSQL数据库主要有以下几类:
1.键值对存储数据库。如:Redis
2.文档存储数据库。如:MongoDB
3.列式存储数据库。如:HBase
4.图形存储数据库。如:Neo4j
以前的概念中,我们总觉得SQL Server、Oralce、MySQL这些才是数据库,但实际Redis,MongoDB这些也是数据库,观念得变过来。出现这种情况,可能是相比于传统关系型数据库(库、表、行)的存储,我们对于NoSQL的存储方式没有比较直观的感觉(至少我是这样
)。下面我们就针对这个盘它。
02
—
Redis
键值对存储数据库Redis是Remote Dictonary Server的简称。C语言编写的。算是内存数据库吧。数据以key-value键值对方式存储。key的值不能重复,value可以根据不同的业务场景选择不同的数据结构。常见的数据结构有:
1.String(字符串):这种不解释
2.List(列表):列表里的值可以重复

3.Set(集合):集合的值去重但无序

4.Hash(散列):可以理解成跟Java时的HashMap类似

5.Sorted Set(有序集合):集合的值去重且有序
注:可视化工具有官方的RedisInsight
03
—
MongoDB
文档存储数据库MongoDB,C++语言编写的。
我们可以类比关系型数据库来看
| 关系型数据库 | MongoDB |
| 数据库(DataBase) | 数据库(DataBase) |
| 表(Table) | 集合(Collection) |
| 行(Row) | 文档(Document) |
2.文档的主键为_id,如果文档插入时没有指定_id的值,MongoDB会自动生成
3.文档的数据格式为BSON(BinaryJSON),长跟JSON很像,但它有一些JSON没有的数据类型
文档记录长这样(MongoDB官网的图)

注:连接工具可以用Robo 3T
04
—
HBase
列式存储数据库HBase,是Hadoop生态中的一员,JAVA语言编写的。HBase没有库的概念,但有表,表中有几个关键的概念:
Row key(行键):表中行的主键
Column Family(列簇):可以理解成列组,由多个列组成一组
Column(列):就跟关系型数据库的列一样
Timestamp(时间戳):数据的变动HBase会记录时间戳

如上图(注:图片为书中所截),phone表查询出来的记录,以黑底记录为例
行键:p001
列簇:info
列:列簇info包括name列和brand列
时间:timestamp
整行表示:行p001的name列内容为iPhone X
注:连接工具可以用Squirrel
05
—
Neo4j
图形存储数据库Neo4j。JAVA语言编写的。
第一眼看到这个名称,一脸蒙圈~~据说使用的查询语言是Cypher(注:这玩意咱也没接触过,不了解)
为方便理解,先上个图(注:图片来源于网上):

感觉数据存储之后可以比较好地反映数据间关系。下面结合图型说一下Neo4j中的几个概念:
1.结点:就是上图的圆圈
2.关系:就是上图中的箭头,表示两个节点间的关系
3.标签:圆圈中的名字
4.关系类型:关系线上的字,描述两结间的关系
5.属性:上图中没有体现,可以理解成对标签的描述,如上图的人名,可以附加上年龄,爱好这些属性描述
注:本身带有管理界面Neo4j Desktop
因为没用过,没太多概念,就先这样吧!!!




