一 : NoSQL 简介
泛指非关系型
数据库,意思是Not only SQL
不仅仅是是SQL,是一种全新的数据库概念,
随着互联网web2.0网站的兴起
,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速,而传统的关系型数据库在应付web2.0
网站,特别超大规模和高并发的SNS
(社交网络服务)类型的web2.0纯动态网站已经显得力不从心.
传统关系数据库难以克服的问题
-
High performance-对数据库高并发读写的需求
web2.0
网站要根据用户个性化信息来实时生成动态页面提供动态信息,所以基本无法使用动态页面静态化技术,隐藏数据库并发负载非常高,往往要达到每秒上万次读写请求,关系数据库应付上万次读写请求,硬盘IO已经无法承受,其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,就热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求.
-
Hunge Storage - 对海量数据的高效存储和访问的需求
类似Facebook,twitter,Friendfeed 这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就到达了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下的,还有像大型web网站登录系统,例如腾讯,盛大,动辄数以亿计的账号,关系数据库也很难对付.
-
High Scalability && HighAvailability- 对数据库的高可扩展性和高可用性的需求
在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有像web Server 和 app Server 那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力,对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来扩展呢
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题
二 : 主流NoSQL产品及类型
NoSql数据库的四大分类 :
-
键值(key-Value)存储数据库
相关产品 : Tokyo Cabinet/Tyrant, Redis,Voldemort,Berkeley DB
典型应用 : 内容缓存,主要用于处理大量数据的高访问负载.
数据类型 : 一系列键值对
优势 : 快速查询
劣势 : 存储的数据缺少结构化
-
列存存储数据库
相关产品 : Cassandra,HBase,Riak
典型应用 : 分布式的文件系统
数据类型 : 以列簇式存储,将同一数据存在一起
优势 : 查找速度快,可扩展性强,更容易进行分布式扩展
劣势 : 功能相对局限
-
文档型数据库
相关产品 : CouchDB,MongoDB
典型应用 : Web应用(与key-Value类似,Value是结构化的)
数据类型 : 一些了键值对
优势 : 数据结构要求不严格
劣势 : 查询性能不高,而且缺乏统一的查询语法
-
图形数据库
相关数据库 : Neo4J,InfoGird,Infinite Graph
典型应用 : 社交网络
优势 : 利用图结构相关算法
劣势 : 需要对这个图做计算才能得出结果,不容易做分布式的集群方案
三 : NoSQL特点
在数据存取上具备关系型数据库无法比拟的性能优势
-
易扩展
NoSQL 数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性,数据之间无关系,这样就非常容易扩展,也无形之间在架构层面上带来了可扩展的能力
-
大数据量,高性能
NoSQL数据库都具有非常高的读写性能,尤其是在大数据量下,同样表现优秀,这得益于它的无关系型,数据库的结构简单
-
灵活的数据模型
NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删字段是一件非常麻烦的事情,如果是非常大量的表,增加字段简直就是找死,这点在大数据量的web2.0时代尤其明显
-
高可用性
NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构,比如Cassanra,HBase模型,通过赋值模型也能实现高可用.
总结 : NoSQL的非关系特性使其成为了后web2.0时代的宠儿.是一项全新的数据库革命性运动.
四 : Redis 简述
Redis
是用C语言开发的一个开源的高性能键值对(key-Value) 数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下 :
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
注
: 官方提供测试数据, 50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s.数据仅供参考,根据服务器配置会有不同结果
五 : redis 的应用场景
- 缓存 (数据查询,短连接,新闻内容,商品内容等等)(最多使用)
- 聊天室的在线好友列表
- 任务队列 (秒杀,抢购,12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
- 分布式集群架构中的session分离
六 : Redis在Linux下的安装
步骤一 :
安装redis编译的c环境,yum install gcc-c++
步骤二 :
将redis-3.0.0.tar.gz 上传到Linux系统中
步骤三 :
解压到/usr/local下 `tar -xvf redis.3.0.0.tar.gz -C /usr/local
步骤四 :
进入redis-3.0.0.tar.gz目录 使用make
命令 编译 redis
步骤五 :
在redis-3.0.0目录中 使用make PREFIX=/usr/local/redis install
命令安装 redis
到 /usr/local/redis中
步骤六 :
拷贝redis-3.0.0中的redis.conf到安装目录redis中
步骤七 :
启动 redis 在bin下执行命令redis-server redis.conf
步骤八 :
如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
启动后看到如上欢迎页面,但此窗口不能关闭,窗口关闭就认为redis也关闭了(类似Tomcat通过bin下的startup.bat的方式)
解决方案:可以通过修改配置文件 配置redis后台启动,即服务器启动了但不会创建控制台窗口
将redis.conf文件中的daemonize从false修改成true表示后台启动
使用命令查看6379端口是否启动ps -ef | grep redis
后端启动命令 :
在redis目录下
./bin/redis-server ./redis.conf
Redis停止
① : 强制结束程序,强行终止Redis进程可能会导致redis持久化数据丢失
② : 正确停止Redis的方式应该是向Redis发送shutdown命名
在redis目录下
.bin/redis-cli shutdown
连接客户端
在redis的安装目录中有redis的客户端,即redis-cli(Redis Command Line Interface)它是Redis自带的基于命令行Redis客户端
在redis目录下
./bin/redis-cli