目录
1.Nosql概述
1.1数据库架构演化历程
Redis可以用作数据库,缓存和消息中间件MQ。
1.单机MySQL的年代
-
web通过数据库访问层访问单机MySQL。
90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够。一般网站是使用静态网页Html,服务器根本没有太大的压力!
-
思考一下,这种情况下:整个网站的瓶颈是什么?
1.如果数据量太大,一个机器放不下。
2.数据量一大,那么就要建索引,索引太多,一个机器的内存也放不下。
3.访问量(读写混合)比较大时,而且没有做读写分离时,那么一台服务器也承受不了。那么只要出现了上述任一情况,就必须想出解决的办法来改进!
2.Memcached(缓存)+ MySQL(免费) + 垂直拆分(读写分离)
- 引入MySQL集群:要保证每台MySQL中的内容都一致:数据库中间件,MyCat,ShardJdbc。
- 引入读写分离:比如2号MySQL负责写内容,1号和3号MySQL负责将2号MySQL中的内容同步过去。读数据可以从1或者3号MySQL中读。
- 引入缓存:主要解决读的问题。网站80%的情况都是读,如果每次都从数据库中读数据不仅麻烦而且数据库压力也很大。我们希望减轻数据的压力,可以使用缓存来保证效率。
- 发展到缓存这一步的过程:优化产品本省,数据库数据结构和索引数据结构---->文件缓存(IO)---->Memcached缓存。
3.水平拆分(按照字段,业务分库分表)+MySQL集群。
4.关系型数据库MySQL已经不够用了
数据量很大,数据类型很多:定位,音乐,热榜等等都是数据。
如果各种各样的数据都存储到MySQL中,MySQL的压力和效率就会很低。
当在大数据的IO压力下,表机构几乎无法更改,比如有1亿条数据,要为表加一个列,这种工作是及其庞大的。
那么就出现了一些新型的数据库,来专门存储各种类型的数据。
5.当今企业架构
1.2.为什么用NoSql
用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等各种各样数据类型的爆发式增长,这时候我们就需要使用NoSql数据库了。NoSql可以很好地处理以上情况。
1.3.关系型数据库
关系型数据库:指采用了关系模型来组织数据的数据库。
关系模型:指的是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
关系型数据库存在的问题:
- 网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
- 当数据量很大时,关系型数据库中的一张表会包含海量的数据,在包含海量数据的表中查询,效率非常低下。
- 当表中数据量巨大是,极其难进行横向扩展(加列)。
- 没法像其他的web服务器那样通过简单的添加硬件节点来扩展性能和负载能力,当需要对数据库进行扩展升级时,往往需要数据迁移停机维护。
- 数据库事务必须具备ACID特性:Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。为了保证数据库事务的ACID特性,关系型数据库对表设计和数据格式有固定要求。
1.4.什么是NoSql
随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代,尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题。NoSQL在当今大数据环境下发展十分迅速。很多的数据类型,比如用户的个人信息、社交网络、地理位置,这些数据类型的存储不需要一个固定的格式。适用于NoSQL数据库来处理。
-
NoSql = Not Only Sql:不仅仅是Sql,泛指非关系型数据库。
-
非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据库存储系统。非关系型数据库有以
键值对
存储,列存储,文档存储,图形(拓扑)数据库,是结构不固定的。
非关系型数据库NoSQL的一些特点:
- 1.方便扩展(数据之间没有关系,很好扩展!)
- 2.数据量大且性能高:Redis一秒写8万次,读11万次。NoSQL的缓存的粒度是记录级,性能会比较高。
- 数据类型是多样的。不需要事先设计数据库(三范式),随取随用。
- 没有固定的查询语言,不要求严格一致性,只要保证最终一致性即可。
- CAP定力和BASE。
1.5.3V+3高
大数据时代的3V:主要是描述问题的
海量Volume
多样Variety
实时Velocity
大数据时代的3高:主要是对程序的要求
高并发
高可扩
高性能。
真正在公司中的实践:NoSQL+RDBMS关系型数据库一起使用
1.6.NoSQL的四大分类
KV键值对:Redis、Tair
文档型数据库:MongoDB
列存储数据库:HBase,分布式文件系统
图关系数据库:Neo4j,InfoGrid
2.Redis入门
1.Redis是什么
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
2.Redis能干嘛
- 1.内存存储,内存是断电即失的,但是Redis也可以持久化,两种持久化机制RDB,AOF。
- 2.效率高,可以用于高速缓存
- 3.发布订阅:简单的消息队列的功能
- 4.地图信息分析
- 5.计数器,计时器:比如浏览量
3.Redis推荐在Linux服务器上搭建,基于Linux学习Redis。
2.1启动连接
1.启动:双击redis-server.exe
启动服务器端,默认监听的端口是6379
2.使用Redis客户端连接Redis:双击启动Redis客户端redis-cli.exe
- 测试是否连通:ping
2.2.Linux下安装Redis
1.解压:tar -zvxf redis.tar.gz
2.基本环境安装:
yum insatll gcc-c++
make
make install
redis的默认安装路径:/usr/local/bin
3.设置为后台启动:Redis默认不是后台启动的,修改配置文件:
4.启动Redis服务:通过指定的配置文件启动
5.客户端连接
6.查看redsi进程是否开启
7.如何关闭:shutdown
客户端还在启动着
8.退出客户端:exit
2.3.单机测试性能:redis-benchmark
redis-benchmark:是一个压力测试工具,官方自带的性能测试工具。
我们来简单测试下:100个并发,每个并发100000请求。
先启动服务端:redis-server copy-dir/redis.conf
性能测试:redis-benchmark -h localhost -p 6379 -c 100 -n 100000