介绍
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,指 非关系型的数据库。
WEB2.0的新需求
随着互联网web2.0网站的兴起(现在的app可以认为是其延续),尤其是 SNS类型 的网站(app),对数据库提出新的需求:
高并发读写
类似 社交类、新闻类的网站、app(微博、头条),往往要达到每秒上万次读写请求。海量数据的高效率存储和访问
对于大型的SNS网站、app,每天用户产生海量的用户动态,一般以 亿 计量数据库的高可扩展性和高可用性
用户量、访问量、数据量与日俱增,数据库可以通过添加更多硬件服务器来扩展性能和支持负载。灵活的数据模型
互联网产品往往要快速迭代、升级,及时捕捉用户的需求,实现功能。那么就会经常改动数据模型。如:增加点赞、简介、个性签名、收藏等
传统关系型数据库无法应付上面需求
关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
表中数据超过500万,就需要做优化,否则效率是极其低下。
关系型数据扩展需要分库分表,往往需要停机维护和数据迁移
需要改动表结构,不灵活
传统关系型数据库的优点无法施展
数据库事务一致性需求
很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
NoSQL分类
Key-value 存储
可以通过key快速查询到其value。一般来说,value可以是任意格式。(Redis包含了其他功能)
如:Redis、MemcacheDB
适用场景:session会话信息,用户配置信息,购物车
文档型数据库
文档存储一般用类似 json 的格式存储,存储的内容是文档型的。这样就可以 对字段建立索引,实现关系数据库的某些功能。
如:MongoDB 、 CouchDB
适用场景:内容管理,博客平台等
列存储数据库
按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
如:Cassandra,HBase
适用场景:事件记录,内容管理,博客平台
不适合需要ACID事务的场合
图数据库
可以使用图结构相关算法,比如最短路径寻址
如:Neo4J
适用场景:社交网络,推荐引擎,基于位置的服务
总结
NoSQL数据库 不是替代 传统关系型数据库,两者是互补的关系
在各自的领域里,都不可替代,都发挥着巨大作用
https://blog.csdn.net/a19881029/article/details/50262309
http://blog.itpub.net/14130873/viewspace-700900/