前端之家收集整理的这篇文章主要介绍了
我们为什么要使用NOSQL非关系数据库?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
随着互联网web2.0网站的兴起,非关系型的
数据库现在成了一个极其热门的新领域,非关系
数据库产品的发展非常迅速。而传统的关系
数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: 1、High performance - 对
数据库高并发读写的需求 web2.0网站要根据
用户个性化信息来实时
生成动态
页面和提供动态信息,所以基本上无法使用动态
页面静态化技术,因此
数据库并发
负载非常高,往往要达到每秒上万次读写请求。关系
数据库应付上万次
SQL查询还勉强顶得住,但是应付上万次
sql写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。 2、Huge Storage - 对海量数据的高效率存储和访问的需求 对于大型的SNS网站,每天
用户产生海量的
用户动态,以国外的Friend
Feed为例,一个月就达到了2.5亿条
用户动态,对于关系
数据库来说,在一张2.5亿条记录的表里面进行
SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的
用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系
数据库也很难应付。 3、High Scalability && High Availability- 对
数据库的高可扩展性和高可用性的需求 在基于web的架构当中,
数据库是最难进行横向扩展的,当一个应用系统的
用户量和访问量与日俱增的时候,你的
数据库却没有办法像web server和app server那样简单的通过
添加更多的硬件和服务节点来扩展
性能和
负载能力。对于很多需要提供24小时不间断服务的网站来说,对
数据库系统进行
升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么
数据库不能通过不断的
添加服务器节点来实现扩展呢? 在上面提到的“三高”需求面前,关系
数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系
数据库的很多主要特性却往往无用武之地, 例如: 1、
数据库事务一致性需求 很多web实时系统并不要求严格的
数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此
数据库事务管理成了
数据库高
负载下一个沉重的负担。 2、
数据库的写实时性和读实时性需求 对关系
数据库来说,插入一条数据之后立刻
查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。 [color=brown][/color][size=medium][/size]3、对复杂的
SQL查询,特别是多表关联
查询的需求 任何大数据量的web系统,都非常忌讳多个大表的关联
查询,以及复杂的数据分析类型的复杂
sql报表
查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键
查询,以及单表的简单条件
分页查询,
sql的
功能被极大的弱化了。 因此,关系
数据库在这些越来越多的应用场景下显得不那么合适了,为了
解决这类问题的非关系
数据库应运而生。 No
sql 是非关系型数据存储的广义定义。它打破了长久以来关系型
数据库与ACID理论大一统的局面。No
sql 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型
数据库无法比拟的
性能优势。该术语在 2009 年初得到了广泛认同。 当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而 No
sql 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 No
sql 实现。一些开源的 No
sql 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。从这些No
sql项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。