关系型数据库与非关系型数据库的选择

自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 可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。

自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 可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。


相关文章

  • 软件设计说明书范本
  • 编号∶______ 版本∶______ 软件详细设计说明书 项目名称:xxxxxxxxxxxx子系统 委托单位:承办单位: 编写: xxxxxx 2002 年 05 月 01 日 校对: xxxxxx 2002 年 05 月 10 日 审核 ...查看


  • 数据库选择题全集
  • 下列不常用的数据模型为.C 概念模型 A.层次模型 B网状模型 C概念模型 D关系模型 在关系数据模型中,用来表示实体关系的是.C 记录 A字段 B记录 C表 D指针 在关系数据库系统中,一个关系相当于.A 一张二维表 A一张二维表 B一条 ...查看


  • 2014数据库系统期中考试试卷(答案)
  • 2014数据库系统期中考试试卷(答案) 一.选择题(26分,每题2分) 1.数据库中,数据的物理独立性是指( ). A .数据库与数据库管理系统的相互独立 B .用户程序与DBMS 的相互独立 C .用户的应用程序与存储在磁盘上数据库中的数 ...查看


  • Access期末考试说明
  • Access期末考试说明 拟定于第十九周周末进行期末考试,具体时间待定,说明如下: 题型及分值: 一.选择题 (50分,每题1分) 二.判断题(10分,每题1分) 三.填空题 (20分,每空2分) 四.简答题 (20分,四个小题) 各章分配 ...查看


  • 地理信息教程
  • 空间数据库管理及属性编辑 一.实验目的 1. 利用 ArcCatalog 管理地理空间数据库,理解 Personal Geodatabse 空间数据库模型的有关 概念. 2. 3. 4. 掌握在 ArcMap 中编辑属性数据的基本操作. 掌 ...查看


  • 二级access公共基础历年真题解析
  • 全国计算机等级考试二级公共基础历年真题解析  2010年9月 选择题:(1)下列叙述中正确的是( ) A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性 ...查看


  • 2011年党内统计[基层版]软件教程
  • 2011年党内统计<基层版>软件教程 一.软件介绍 为适应组织工作需要,保证党内数据的保密性.安全性,中组部与北京万里红科技股份有限公司联合研发了支持网络环境的党内统计<基层版>软件. (一)配置要求 建议配置:CP ...查看


  • 第二章 关系数据库习题
  • 第二章 关系数据库 一.选择题: 1.对于关系模型叙述错误的是. A .建立在严格的数学理论.集合论和谓词演算公式基础之一 B .微机DBMS 绝大部分采取关系数据模型 C .用二维表表示关系模型是其一大特点 D .不具有连接操作的DBMS ...查看


  • 2012湖南省计算机等级考试二级试题及答案
  • 1.希尔排序法属于哪一种类型的排序法(B) A.交换类排序法 B.插入类排序法 C.选择类排序法 D.建堆排序法 2.算法一般都可以用哪几种控制结构组合而成(D) A. 循环.分支.递归 B. 顺序.循环.嵌套 C. 循环.递归.选择 D. ...查看


热门内容