NoSQL概述

什么是NoSQL?

为了解决高并发、高负载、高可扩展(也即高可用)、大数据存储问题而产生的数据库解决方案,就是NoSQL数据库。NoSQL泛指非关系型的数据库,NoSQL即Not Only SQL,意思是不仅仅是SQL,它是一项全新的数据库理念,可以作为关系型数据库的良好补充。

为什么需要NoSQL?

随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系型数据库产品的发展非常迅速。而传统的关系型数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:

  • High performance:对数据库高并发读写的需求。
    web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系型数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的实时统计在线用户状态、记录热门帖子的点击次数以及投票计数等,因此这是一个相当普遍的需求。
  • Huge Storage:对海量数据的高效率存储和访问的需求。
    类似Facebook、twitter、Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系型数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯、盛大,动辄数以亿计的帐号,关系型数据库也很难应付。
  • High Scalability与High Availability:对数据库的高可扩展性和高可用性的需求。
    在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?而NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

主流NoSQL产品

市面上的NoSQL数据库有很多种,但总的来说可以分为四大类,如下图所示。

nosql是什么 nosql的含义是什么?_关系型数据库

NoSQL的特点

在大数据存取上具备关系型数据库无法比拟的性能优势,例如:

  • 易扩展
    NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系型数据库的关系型特性。数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。
  • 大数据量,高性能
    NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀,这得益于它的无关系性,数据库的结构简单。
  • 灵活的数据模型
    NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦,这点在大数据量的web2.0时代尤其明显。
  • 高可用
    NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

综上所述,NoSQL的非关系特性使其成为了后web2.0时代的宠儿,助力大型web2.0网站的再次起飞,是一项全新的数据库革命性运动。

Redis概述

上面介绍了一点NoSQL的知识,我们知道了我们所要学的Redis只是NoSQL数据库中的一种。同样,在学习Redis之前,我也对其作一点小小的介绍。

Redis的由来

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站——实时统计系统LLOOGG,然而没过多久该公司的创始人Salvatore Sanfilippo便对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。
Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis,国内如新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。
VMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。

什么是Redis?

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型(指的就是键值对中值的数据类型)如下,别急,后面我会一一详细的介绍。

  • 字符串类型;
  • 散列类型;
  • 列表类型;
  • 集合类型;
  • 有序集合类型。

官方提供测试数据:50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s。数据仅供参考,根据服务器配置会有不同结果。

Redis的应用场景

  • 缓存,例如数据查询、短连接、新闻内容、商品内容等等;(这个是使用得最多的)
  • 分布式集群架构中的session分离;
  • 聊天室的在线好友列表;
  • 任务队列,例如秒杀、抢购、12306抢票等等;
  • 应用排行榜;
  • 网站访问统计;
  • 数据过期处理(可以精确到毫秒)。