NoSQL简介
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。在现代的计算系统每天在网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。通过应用实践证明,关系模型是非常适合于客户/服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
如今我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论[2],来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
NoSQL数据库的分类
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.
各个分类数据库对比
分类 | NoSQL 数据库 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
键值 ( key-value ) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
图形 (Graph) 数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
适用场景
1、数据模型比较简单, 数据库表schema经常变化;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高, 高并发数据库请求
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。
6、海量数据的分布式存储。
Nosql和SQL的比较
介绍
SQL(Structured Query Language)数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。
NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB、Redis、CouchDB。
目前互联网的要求
随着互联网的不断发展,各类型的应用层出不穷,在这个云计算的时代,对技术提出了更多的需求,主要体现在这四个方面:
- 低延迟的读写速度:应用快速的反应能极大地提升用户的满意度。
- 海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量。
- 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理。
- 庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低。
关系型数据库的优点和缺点
优点
- 事务处理——保持数据的一致性。
- 由于以标准化为前提,数据更新的开销很小
- 可以进行复杂查询
缺点
- 扩展困难:由于存在类似join这要多表查询机制,使得数据库在扩展方面很艰难
- 读写慢:这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重。
- 成本高:企业级数据库的价格很惊人,并且随着系统的规模而不断上升。
- 有限的支撑容量:现有关系型解决方案还无法支撑海量的数据存储。
NoSQL优缺点
优点
- 简单的扩展:典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群。
- 快速的读写:主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作。
- 低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本。
缺点
- 不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本。
- 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MSSQL Server和Oracle那样能提供各种附加功能,比如BT和报表等。
- 现有产品的不够成熟:大多数产品都还处于初创期。
总结
我们开发应该是需求决定使用数据库的类型,而不是数据库语言来决定的。根据实际的需要来选择不同的数据库. 请不要选择一种小众的技术组合,那样你会发现寻找有经验的开发者和相关的技术支持是非常困难的.
文章评论