前言
1、单机数据库.90年代,一个网站的访问量一般不会太大,单个数据库完全够用,数据库也没有什么压力。但是,现在我们处于大数据时代;大数据顾名思义数据量很多,那么应用传统的关系型数据库就有可能会出现如下问题:
DAL 数据库访问层
- 数据量增加到一定程度,单机数据库就放不下了。
- 数据的索引(B+ Tree),一个机器内存也存放不下。
- 访问量变大后(读写混合),一台服务器承受不住。
只要发生如上情况之一,那么我们的数据库就必须要晋级
2、Memcache(缓存) + Mysql + 垂直拆分(读写分离)
80%的网站都是在进行读操作,这样的话每次都要去数据库查询就非常麻烦,同时为了能够减轻数据库、服务器的压力,我们可以使用缓存来保证效率!
缓存的出现经历了以下几个过程:
- 优化数据库的数据结构和索引(难度大)。
- 文件缓存,通过IO流获取比每次都访问数据库效率略高,但是流量爆炸式增长时候,IO流也承受不了。
- MemCache,当时最热门的技术,通过在数据库和数据库访问层之间加上一层缓存,第一次访问时查询数据库,将结果保存到缓存,后续的查询先检查缓存,若有直接拿去使用,这样我们的访问效率就会大大提升。
3、(分库分表) + 水平拆分 + MySQL集群
早些年MyISAM: 表锁,十分影响效率!高并发下就会出现严重的锁问题;
于是转战Innodb:行锁,每次查询数据只锁这一行。
慢慢的就开始使用分库分表来解决写的压力! MySQL 在哪个年代推出 了表分区!这个并没有多少公使用!
MySQL 的 集群,很好满足那个年代的所有需求!
4、如今最近的年代
MySQL 等关系型数据库就不够用了!数据量很多,变化很快!MySQL 有的使用它来存储一些比较大的文件,博客,图片!数据库表很大,效率就比较低了!
如果有一种据库来专门处理这种数据,MySQL压力就变得十分小(研究如何处理这些问题!)大数据的IO压力下,表几乎没法更大! Nosql的出现就是一种非常好的选择!
5、目前一个基本的互联网项目!
(一)、Nosql概述
1、为什么要用NoSQL ?
用户的个人信息,社交网络,地理位置,自己产生的数据,日志等等爆发式增长!传统的关系型数据库已无法满足这些数据处理的要求,这时我们就需要使用NoSQL数据库,它可以很好的处理上述的情况!
2、什么是Nosql
NoSQL = Not Only SQL(不仅仅是SQL)-----泛指非关系型数据库
这里有两个概念:关系型数据库和菲关系型数据库
- 关系型数据库:列+行,同一个表下数据的结构是一样的。
- 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。
NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。
3、Nosql特点
- 方便扩展(数据之间没有关系,很好扩展!)
- 大数据量高性能(Redis一秒可以写8万次,读11万次,NoSQL的是缓存记录级的,是一种细粒度的缓存,性能会比较高!)
- 数据类型是多样型的!(不需要事先设计数据库,随取随用!如果是数据量十分大的表,很多人很难根据三大范式将其完整的设计出来)
传统的 RDBMS(关系型) 和 NoSQL
传统的 RDBMS(关系型数据库):
- 结构化组织
- SQL
- 数据和关系都存在单独的表中 :行+列
- 操作,数据定义语言
- 严格的一致性
- 基础的事务操作
- …
Nosql:
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE
- 高性能,高可用,高扩展
- …
了解:3V + 3高
大数据时代的3V :主要是描述现实问题的
- 海量Velume
- 多样Variety
- 实时Velocity
大数据时代的3高 : 主要是对程序设计的要求
- 高并发 (同时)
- 高可扩 (随时水平拆分)
- 高性能 (用户体验)
真正在公司中的实践:NoSQL + RDBMS(关系型) 一起使用才是最强的。
4、Nosql的四大分类
KV键值对:
- 新浪: Redis
- 美团: Redis+tair
- 阿里、百度: Redis +memecache
文档型数据库(bason 格式和json一样)
- MongoDB
- MongoDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档!
- MongoDB是一个介于关系型数据库和非关系数据中中间的产品。MongoDB是非关系型数据库中功能最疯的的,最像关系型数据库的!
列存储数据库
- HBse
- 分布式文件系统
图关系数据库
- 存的是关系,不是图片。比如: 朋友圈社交网络,广告推荐。
- Neo4j,inforGrid
5、阿里巴巴数据结构演进
技术急不得,越是慢慢学,才能越扎实。
技术没有高低之分,就看适应不适用。
开源才是技术的王道。
# 1. 商品的基本信息 名称、价格、商家信息: 关系型数据库就可以解决了! MySQL/Orcal. 淘宝用的是自研发的MySQL #2. 商品的描述、评论(文字比较多) 文档型数据库中: MongoDB #3. 图片 分布式文件系统: FastDFS -淘宝自己的TFS -谷歌自己的 GFS -hadopp HDFS -阿里云的 oss #4. 商品的关键字 (搜索) -搜索引擎 solr elasticsearch -ISerach: 多隆 #5.商品人们的波段信息 -内存数据库 -Redis Tair、Memache... #6.商品的交易,外部的支付接口 -三方应用
所有牛逼的人都有一段苦逼岁月,但是你只要像SB一样的去坚持,终究牛逼。
(二)、Redis入门
1.概述
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且还实现了master-slave(主从)同步。
2.Redis能干什么?
- 内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
- 高效率、用于高速缓冲
- 发布订阅系统
- 地图信息分析、周围的人…
- 计时器、计数器(浏览量)
3、Redis的特点
- 速度快:Redis是用C语言实现的,所有数据存储在内存中以键值对形式保存。
- 丰富的数据类型 :Redis支持五种数据结构:String、List、Set、Hash、Zset。
- 持久化操作:Redis的所有数据存储在内存中,对数据的更新将异步地保存到磁盘上。
- 主从复制:主服务器上只进行写的操作,在从的服务器上进行读的操作。
- 支持高可用和分布式:使用redis自带的哨兵机制来实现高可用。
- 支持事务
- 集群操作
4、window安装Redis
- 下载安装包 https://github.com/tporadowski/redis/releases?page=1
- 解压到我们程序员都要由的环境目录下
- 开启Redis,双击运行服务即可
- 使用客户端Redis来链接redis
- window下使用确实简单,但是Redis 推荐我们使用Linux去开发。
5、Linux安装Redis
- 下载压缩包
- 上传到home目录下面的jsxs文件夹中
3. 安装基本环境
(1)解压Redis的安装包!程序一般放在/opt目录下。
# 移动到 /opt mv redis-7.0.9.tar.gz /opt #进入到 /opt目录 cd /opt # 解压redis tar -zxvf redis-7.0.9.tar.gz
解压完成
解压完成后,可以看到我们的redis配置文件
- 安装基本环境
# 安装基本的环境 yum install gcc-c++ # 执行make命令 make # 安装 make install
make成功