什么是NoSQL?
NoSQL即Not Only Sql, 意为“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
为什么会有NoSQL?
非关系型的数据库是为了弥补关系型数据库的不足而产生的,随着web2.0的兴起,传统的关系型数据库在面对超大规模和高并发的互联网项目中显得力不从心,在高并发的要求下,关系型数据库暴露出了以下的问题
-
High performance-对数据库高并发读写的要求
由于web2.0的兴起,网站需要根据用户的个性化信息来动态的生成页面信息,往往一个中小型的互联网项目在每秒中会对数据库发起上万的请求,在样就会对磁盘造成很大的压力,在这样的情况下NoSQL技术应运而生。
-
Huge Storage-对海量数据的高效率存储和访问的需求
以微信为例,我们每天都会习惯性的刷朋友圈,以此来建立与外界的联系,但在这背后的数据量是十分惊人的,每天都会有不少于一亿张图片被上传到朋友圈,这对于关系型数据库来说,它的效率是及其低下且无法忍受的,在比如我们打英雄联盟登陆自己的账号密码时,要在数秒之内从数据库中查找到记录并返回查询结果,这是无法做到的。
-
High Scalability and High Availability-对数据的高可扩展性和高可用性的需求
在基于web的架构当中,数据库是最难被扩展的,当我们数据库的容量到达一定程度的时候,我们没有办法通过添加插件或者是服务节点的方式来扩展性能和负载能力,往往需要人为对数据库进行升级和扩展,这是一件很痛苦的事情,因为它往往以为着停机维护和数据迁移。
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
NoSQL的种类
- 键值存储数据库
- 相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
- 典型应用:内容缓存、主要用户存储大量数据的高访问负载。
- 数据模型:一系列键值对
- 优势:快速查询
- 劣势:存储的数据缺少结构化
- 列存储数据库
- 相关产品:Cassandra、Hbase、Raik
- 典型应用:分布式的文件系统
- 数据模型:以列簇式存储,将同一列的数据存储到一起
- 优势:查找速度快,可扩展性强,更容易进行分布式扩展
- 劣势:功能相对局限
- 文档型存储的数据库
- 相关产品:CouchDB、MongoDB
- 典型应用:Web应用(跟key-value类似,value是结构化)
- 数据模型:一系列键值对
- 优势:数据结构要求不严格
- 劣势:查询的性能不高、缺乏统一的查询语法
- 图形数据库
- 相关产品:Neo4j、InfoGrid、Infinite Graph
- 典型应用:社交网络
- 数据模型:图结构
- 优势:利用图结构的相关算法
- 劣势:需要对整个图进行计算才能得出结果,不容易做分布的集群方案
NoSQL的特点
- 易扩展
NoSQL数据库的种类繁多,但它们都去掉了关系型数据库的关系型特性,数据之间没有关系,这样就非常容易扩展,也在无形之间,在架构的层面上带来了可扩展的能力。 - 大数据量、高性能
由于NoSQL数据之间的无关系性,也就意味着他的数据结构简单,这就使得它们在大数据量的情况下也拥有非常高的读写性能。 - 灵活的数据模型
NoSQL不需要提前为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,CRUD是一件非常麻烦的事情,如果是非常大数据量的表,CRUD简直是一个噩梦。 - 高可用
NoSQL在不影响性能的情况下,可以非常方便的实现高可用的架构,例如Hbase,通过复制模型也能实现高可用。
由上可以看出,NoSQL的特性使得它成为了web2.0里面的重要的一个部分,助力了web2.0网站的起飞,是一项全新的数据库革命性运动。