Nosql
我们先前学的都是mysql,它是关系型数据库,表与表之间有联系。
NoSql即非关系型数据库。
MySql
MySql的瓶颈
- 数据太大了,一个机器就放不下了
- 30万以上的数据,需要使用索引(B+Tree)
- 访问量大的话,服务器压力大
解决方案:读写分离(垂直拆分)
因为80%网站对于数据的操作都是读取,不会产生并发问题,所以为了提升效率,当我们第一次读取完数据后,将数据放入缓存中,下一次查询如果是同样的业务,则直接从缓存中读取数据,会大大提升性能,解决了读的压力
解决方案:分库分表,MySql集群(水平拆分)
每一个集群放一些表和数据库,这样的操作解决了写的压力
如今的数据
数据量大,变化快,导致mysql无法很好的解决问题。
有的人使用mysql来存储一些比较大的文件,博客推文,图片等,数据库非常庞大,效率十分低下。
如果有一种数据库来专门处理这种数据,mysql的压力就变小了。这时候就需要使用Nosql了
特点
- 方便拓展(数据之间联系低,很好拓展)
- 大数据高性能(Redis1s读11万次,写8万次,Nosql的缓存记录,是一种细粒度的缓存,性能比较高)
- 数据多样,不需要事先设计数据库
大数据时代的3V:出现的一些问题
- Volume 海量
- Variety 多样
- Velocity 实时
大数据时代的3高:对程序的要求
- 高性能
- 高可用(扩)
- 高并发
Nosql的四大分类
- KV键值对
- 新浪:Redis
- 美团:Redis+Tair
- 阿里+百度:Redis+MemeCache
应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于些日志系统等等。
数据模型:Key 指向的键值对Value,通常用hash table来实现
优点:查找速度快
缺点:数据无结构,通常只被当做字符串或者二进制存储
- 文档型数据库(BSON格式)
- MongoDB
- 基于分布式文件存储的数据库,C++编写的,主要用来处理大量的文档
- MongoDB是一个介于关系型数据库和非关系型数据库中间的产物,MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的
- ConthDB
应用场景:web应用
数据模型:key-value键值对(Value为结构化数据)
优点:数据结构要求不严格表结构可不需要像关系型数据库那样需要预先定义表结构
缺点:查询效率不高,而且缺乏统一的查询语句
- 列存储数据库
- HBase
应用场景:分布式文件系统
数据模型:以列簇式存储,将同一列数据存储在一起
优点:查找速度快,可拓展性强,容易实现分布式文件系统
缺点:功能相对局限
- 图形关系数据库
存的是关系,不是存图形的
- Neo4j
- InfoGrid
应用场景:社交网络、相关推荐
数据模型:图架构
优点:利用图结构相关算法,比如最短路径寻址N度关系查找等
缺点:很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方式
Redis简介
概述
Redis全名是Remote Dictionary Server ,即远程字典调用
默认端口是6379
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
它使用ANSI、C语言编写的、支持网络、可以基于内存亦可持久化的日志型、Key-value数据库、并提供多种语言的API,亦被称为结构化数据库
下载下载后直接解压即可
1 | 链接:https://pan.baidu.com/s/12ozkQkUss8GH70lf7qrinQ |
点击redis-server.exe即可启动服务
备注
Redis推荐我们使用Linux使用redis,所以接下来使用阿里云服务器来学习redis
1 | 链接:https://pan.baidu.com/s/1Hy1eFwcSqfftXrWv92-zug |
将压缩文件解压到服务器的opt目录下即可,进入解压后的目录,然后安装gcc-c++
1 | yum install gcc-c++ |
也可以使用docker创建redis容器
1 | 开启一个redis容器并设置密码 |