NoSQL
1. NoSQL
- MyISAM:表锁,十分影响效率!高并发下就会出现严重的锁问题
- Innodb: 行锁
1.1 为什么要使用NoSQL
- 用户的个人信息,社交网路,地理位置.用户自己产生的数据,用户日志等等爆发式增长
- 这时候我们就需要NoSQL数据库,Nosql可以很好的处理以上的情况!
1.2 什么是NoSQL
- NoSQL = not only SQL(不仅仅是SQL)
- 泛指非关系型数据库
1.3 NoSQL特点
解耦!
- 方便扩展(数据之间没有关系,很好扩展!)
- 大数据量高性能(Redis 一秒写8万次,读取11万,CoSQL的缓存记录,是一个细粒度的缓存,性能会比较高!)
- 数据类型是多样性的!(不需要事先设计数据库!随取随用!如果是数据十分大的表,很多人就无法设计了!)
- 传统RDBMS和NoSQL
-
传统的RDBMS
- 结构化组织
- sql
- 数据和关系都存在单独的表中
- 操作,数据定义语言
- 严格的一致性
- 基础的事务
-
Nosql
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE (异地多活)
- 高性能,高可用,高可扩
-
1.4 了解3V + 3高
大数据时代的3V:主要是描述问题的
- 海量的Volume
- 多样的Variety
- 实时Velocity
大数据时代的3高:主要是对程序的要求
- 高并发
- 高可扩
- 高性能
1.5 NoSQL的四大分类
- KV键值对
- 文档数据库(bson格式 和json一样)
- MongoDB (一般必须掌握)
- MongoDB是一个基于分布式文件存储的数据库,C++编写,主要来处理大量的文档!
- MongoDB是一个介于关系型数据库和非关系型数据中中间的产品! MongoDB 是非关系型数据库中功能最丰富的,最像关系型数据库的!
- ConthDB
- 列存储数据库
- HBase
- 分布式文件系统
- 图关系数据库(关系,例如:社交网络)
2. Redis入门
- Redis (
Remove Dictionary Server
) 即远程字典服务
- 是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API,redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
- 结构化数据库
- redis官网:https://www.redis.net.cn/
2.1 Redis作用
- 内存存储、持久化、内存中是断电既失,所以说持久化很重要(rdb、aof)
- 效率高,可以用于高速缓存
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(浏览量)
2.2 Redis特性
- 多样的数据类型
- 持久化
- 集群
- 事务
2.3 Redis性能测试
-
redis-benchmark是一个压力测试工具! 官方自带的性能测试工具
注意:redis-benchmark命令在linux命令行中执行,而不是redis-cli中执行
# 测试: 100个并发测试 100000请求 redis-benchmark -h localhost -p 6370 -c 100 -n 100000
2.4 基础知识
- redis默认有16个数据库
- 默认使用的是第0个
- 可以使用select进行切换
>select 3 # 切换数据库 >dbsize # 查看数据库大小
命令:
- keys * :查看数据库所有key
- flushall :清除所有数据库
- flushdb:清除当前数据库
历史:
-
为什么redis端口号是6379 ? 人名-手机-对应数字
-
redis是单线程的
-
Redis为什么单线程还这么快?
- 误区: 高性能的服务器一定是多线程的?
- 误区: 多线程(CPU上下文切换) 一定比单线程效率高
CPU>内存>硬盘速度(juc)
核心:redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!) ,对于内存系统来说,如果没有上下文切换效率就是最高的! 多次读写对都是在一个CPU上的,在内存情况下,这个就是最佳的方案