自1970年,埃德加·科德提出关系模型之后,关系数据库便开始出现,经过了40多年的演化,如今的关系型数据库具备了强大的存储、维护、查询数据的能力。但在关系数据库日益强大的时候,人们发现,在这个信息爆炸的“大数据”时代,关系型数据库遇到了性能方面的瓶颈,面对一个表中上亿条的数据,SQL语句在大数据的查询方面效率欠佳。我们应该知道,往往添加了越多的约束的技术,在一定程度上定会拖延其效率。
在1998年,Carlo Strozzi提出NOSQL的概念,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。注意,这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。但是NoSQL的发展慢慢偏离了初衷,CarloStrozzi也发觉,其实我们要的不是"nosql",而应该是"norelational",也就是我们现在常说的非关系型数据库了。
在关系型数据库中,导致性能欠佳的最主要因素是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,我们必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。
非关系型数据库提出另一种理念,他以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供想SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显得更为合适。
目前出现的NoSQL(Not only SQL,非关系型数据库)有不下于25种,除了Dynamo、Bigtable以外还有很多,比如Amazon的SimpleDB、微软公司的AzureTable、Facebook使用的Cassandra、类Bigtable的Hypertable、Hadoop的HBase、MongoDB、CouchDB、Redis以及Yahoo!的PNUTS等等。这些NoSQL各有特色,是基于不同应用场景而开发的,而其中以MongoDB和Redis最为被大家追捧。
以下是MongoDB的一些情况:
MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。
参考:NoSQL 初探http://space.itpub.net/26277071/viewspace-708958
难以抗衡关系型数据库 NoSQL革命仍要等待http://www.oschina.net/news/2447
简单分析灵活的非关系型数据库NoSQL
http://idg.ccw.com.cn/htm2012/20120209_960633.shtml
总结:
|
sql |
nosql |
价格 |
昂贵(有对应的供应商) |
便宜(因为是开源的) |
使用 |
会强加一些东西 |
|
性能 |
性能缓慢,因为会有很多的约束条件来维护数据的完整性和安全性, |
很少的约束条件,不能很好的维护数据的完整性 |
表的存储结构 |
表都是存储一些格式化的数据结构,每个元组字段的组成都一样(便于表之间的关联) |
表结构不固定,以键值对存储 |
相关推荐
二.NoSQL数据库的产生 关系数据库面临挑战 关系数据库面对超大规模和高并发的SNS类型的web2.0纯动态网站显得力不从心,暴露了很多难以克服的问题 A 大数据发展 大规模数据集合,多重数据带来了许多挑战,尤其是...
2. 社区支持和成熟度:相较于历史悠久的SQL数据库,NoSQL数据库的社区支持和工具成熟度还有待提高。 3. 应用场景:NoSQL数据库广泛应用于互联网服务、社交网络、物联网、大数据分析等领域,例如Facebook的Tao系统、...
相比于传统的SQL(Structured Query Language)数据库,NoSQL数据库在扩展性、性能以及对大数据的支持方面具有明显优势。NoSQL数据库通常支持多种数据模型,如键值对、文档、列族和图等。 #### 二、NoSQL数据库的...
【SQL和NoSQL数据库概述】 SQL(Structured Query Language)数据库是一种关系型数据库,它遵循ACID(原子性、一致性、隔离性和持久性)原则,确保数据的可靠性和一致性。SQL数据库通常使用表格形式来存储数据,...
- **查询语言**:SQL数据库使用SQL语言进行数据查询和操作,而NoSQL数据库通常提供特定于系统的查询接口或API。 ### 结论 NoSQL数据库作为现代数据管理的重要组成部分,在解决大规模数据处理问题方面展现出了巨大...
【文件名称列表】:“常见的NoSQL数据库.mmap”和“基础知识.mmap”分别代表了NoSQL数据库的种类和基础理论的学习内容。 **NoSQL数据库入门知识详解** NoSQL(Not Only SQL)数据库是一种非关系型数据库,它的设计...
本书首先会介绍NoSQL数据库的基本概念,包括与关系型数据库的区别,以及NoSQL的四大类型:键值存储、列族、文档数据库和图形数据库。这些类型的数据库各有优势,适应不同的应用场景,例如键值存储适合高速缓存,文档...
NoSQL数据库通常支持灵活的数据模式,能够处理大量非结构化或半结构化的数据,并且在扩展性和性能方面具有优势。 #### NoSQL数据库的特点 - **高可扩展性**:NoSQL数据库设计时考虑了水平扩展性,即通过增加更多的...
### NoSQL数据库概述 #### 一、什么是NoSQL数据库?...总之,NoSQL数据库通过其独特的设计和特点,在解决传统关系型数据库难以应对的挑战方面发挥着重要作用,为现代Web应用和大数据处理提供了强大的支持。
8. **开发和调试技巧**:学习如何使用NoSQL数据库的查询语言和工具,如MongoDB的Mongoose库,以及如何进行性能测试和调优。 9. **未来趋势**:了解NoSQL数据库的发展方向,如多模数据库、云原生数据库以及与SQL的...
大数据挑战与NoSQL数据库技术是当今信息技术领域中的热门话题,特别是在数据量呈指数级增长的背景下,传统的数据库管理系统已经无法满足高效存储和处理大规模数据的需求。NoSQL(Not Only SQL)数据库应运而生,成为...
综上所述,NoSQL数据库在大数据时代发挥着越来越重要的作用,其灵活的可扩展性、灵活的数据模型和与云计算的紧密融合特点,使它成为处理大规模数据和高并发场景的理想选择。随着技术的发展,NoSQL数据库的类型和应用...
本文将深入探讨SQL数据库与NoSQL数据库的区别、优势、以及它们在不同场景下的应用。 SQL数据库和NoSQL数据库各有优势和局限,选择哪种数据库取决于具体的应用需求。理解它们之间的差异有助于开发者做出更合适的技术...
NoSQL数据库是指不遵循传统关系数据库管理系统(RDBMS)的数据库管理系统,主要特点是去中心化、可扩展性强、灵活的数据模型和高性能。 5.1 NoSQL简介 NoSQL数据库具有灵活的可扩展性、灵活的数据模型和与云计算...
NoSQL数据库,全称为"Not Only SQL",是一种非关系型的数据库系统,旨在解决传统关系型数据库在处理大规模数据和高并发场景下遇到的问题。在90年代,由于网站访问量较小,静态网页为主,单一数据库可以满足需求。但...
- **关系数据库**: MySQL、SQL Server 和 Oracle 均属于关系数据库,它们采用 SQL 作为标准查询语言,支持 ACID 特性(原子性、一致性、隔离性和持久性)。 - **非关系数据库**: 指的是不采用表格形式来组织数据的...
NoSQL数据库,全称为"Not Only SQL",是近年来在大数据处理和分布式系统中广泛应用的一种非关系型数据库。与传统的关系型数据库相比,NoSQL数据库在处理大规模数据、高并发访问和分布式存储方面具有优势,尤其适合...
NoSQL 数据库是当前数据库领域的热门话题,无论是在大数据时代还是在面对快速增长的数据规模和日渐复杂的数据模型中,NoSQL 数据库都扮演着越来越重要的角色。本文将从 NoSQL 数据库的特点和应用场景两个方面进行...