1、NoSQL非关系型数据库概述
目标
-
什么是NOSQL
-
为什么要使用NOSQL
【1】 什么是NOSQL
NoSQL概念
-
Not Only SQL 通常指的是非关系型数据库,通常用于提升数据查询的速度,有时也叫缓存。Redis是非关系型数据库的一种。非关系型数据库不能代替关系型数据库,只是关系型数据库的补充。
【1】非关系数据库的本质:内存存储(数据库存储运行在内存中)。如果不持久化,那么数据就会丢失。
【2】数据之间不存在对应关系。
-
关系型数据库:MySQL,Oracle,SQL Server等。数据与数据之间是有关系的:1对1,1对多,多对多。表中还有各种约束,数据添加进去的时候,约束的检查,关系型数据库还是事务控制。如果数据库中数据越来越多的时候,查询速度越来越慢。
【1】数据存储本质:把数据存储在硬盘上(持久化存储)
【2】使用数据表存储数据(表与表之间存在关联关系)
【补充】关于内存和硬盘
说明:
1.硬盘属于磁性材料,交互数据使用IO流。每秒1万次
2.内存:采用电容方式操作数据。读数据:11万/s 写数据:8万/s
NoSQL数据库的四大分类
按存储的格式分成:
键值(Key-Value)存储数据库:Map
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。今天学习的Redis就是这种类型。Redis是使用C语言编写的,免费开源的。
列存储数据库
通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库可以看作是键值数据库的升级版,允许嵌套键值对。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
【2】 非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点
-
格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型,例如字符、整数类型。
-
速度快:nosql可以使用硬盘或者随机存储器RAM(也叫主存,是与CPU直接交换数据的内部存储器)作为载体,而关系型数据库只能使用硬盘;
-
成本低:nosql数据库部署简单,基本都是开源软件。
缺点
-
不提供sql支持,学习和使用成本较高;
-
无事务处理;(高版本也逐渐开始支持事务了)
-
数据结构相对复杂,复杂查询方面不方便。
【3】 为什么要使用NOSQL
具体表现为对如下三高问题的解决:
High Performance - 数据库高并发访问
在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。
-
如天猫的双11,从凌晨0点到2点这段时间,每秒达到上千万次的访问量。
-
12306春运期间,过年回家买火车抢票的时间,用户不断查询有没有剩余票。
Huge Storage - 海量数据的存储
数据库中数据量特别大,数据库表中每天产生海量的数据。
类似QQ,微信,微博,每天用户产生海量的用户动态,每天产生几千万条记录。对于关系数据库来说,在一张几亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
High Scalability && High Availability- 高可扩展性和高可用性的需求
关系型数据库进行扩展和升级是比较麻烦的一件事,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
非关系型数据库可以通过不断的添加服务器节点来实现扩展,而不需对原有的数据库进行维护。
疑问:非关系数据库存储什么样的数据呢?
用于查询比较多,增删改比较少的表。Redis相当于一个缓存,避免了mysql的重复查询。
小结
-
什么是NoSQL:Not Only SQL通常指定是非关系型数据库
-
NoSQL有哪四大类?
-
键值对:redis
-
列存储 hbase
-
文档型存储:mongodb
-
图形存储方式
-
-
为什么要使用NoSQL?
解决三高问题:高并发,海量数据存储,高可扩展性和可维护性