关系型数据库的缺点:
  随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:
  1、High performance - 对数据库高并发读写的需求
  web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
  2、Huge Storage - 对海量数据的高效率存储和访问的需求
  对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。
  3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求
  目前新浪微博的Redis 和Google 的Bigtable 以及Amazon 的SimpleDB使用的是NoSQL 型数据库。
  NoSQL 优点:
  1、易扩展
  NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
  2、大数据量,高性能
  NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现。这得益于它的无关系性,数据库的结构简单。一般MySQL使用 Query Cache,每次表的更新Cache失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的 Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说要性能高很多了。
  3、灵活的数据模型
  NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直是一个噩梦。这点在大数据量的web2.0时代尤其明显。
  NoSQL在不太影响性能的情况,可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。
  NoSQL数据库主流的有文档数据库,列存数据库,键值数据库,三者分别有代表作MongoDB,HBase和Redis。
  如果将NoSQL比作兵器的话,可以这样(MySQL是典型的关系型数据库,一样参与比较):

  1、MySQL产生年代较早,而且随着LAMP大潮得以成熟。
  尽管其没有什么大的改进,但是新兴的互联网使用的多的数据库。像传统的菜刀,结构简单,几百年没有改进。但是不妨碍产生各式各样的刀法,只要有一把,能胜任厨房里的大部分事务。MySQL也是一样,核心已经稳定。但是切库,分表,备份,监控,等等手段一应俱全。
  2、MongoDB是个新生事物,提供更灵活的Schema,Capped Collection,异步提交,地理位置索引等五花十色的功能。
  像瑞士军刀,不但可以当刀用,还可以开瓶盖,剪指甲。但是他也不比MySQL强,因为还缺乏时间的磨砺。一是系统本身的稳定性,二是开发,运维需要更多经验才能流行。