关系型数据库与Key-value型数据库Mongodb模式设计对比

转载 2016年06月01日 10:48:22

关系型数据库与Key-value型数据库Mongodb模式设计对比

 

关系型数据库与Key-value型数据库Mongodb模式设计对比

        MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(Schema Design)上的差别,正是由于这一层次的差别衍生出其它各方面的不同。

    我们可以简单的认为关系型数据库由数据库、表(table)、记录(record)三个层次概念组成,而在构建一个关系型数据库的时候,工作重点和难点都在数据库表的划分与组织上。一般而言,为了平衡提高存取效率与减少数据冗余之间的矛盾,设计的数据库表都会尽量满足所谓的第三范式。相对的,可以认为MongoDb由数据库、集合(collection)、文档对象(Document-oriented、BSON)三个层次组成。MongoDb里的collection对应于关系型数据库里的表。当然,不要期望collection会满足所谓的第三范式,因为它们根本就不在同一个概念讨论之内。类似于表由多条记录组成,集合也包含多个文档对象,虽然说一般情况下,同一个集合内的文档对象具有相同的格式定义,但这并不是必须的,即MongoDb的数据模式是自由的(schema-free、模式自由、无模式)。

    以一实例来说,假设我们需要设计一个小型数据库来存储“学生、地址、科目、成绩”这些信息,那么关系型数据库的设计如图1所示,而Key-value型数据库的设计则可能如图2所示。

 

 

 

  

图1、关系型的数据库设计

 

 

图2、Key-value型的数据库设计(直接借用的mongodb官方图)

        对比图1和图2,在关系型的数据库设计里划分出了4个表,而在Key-value型的数据库设计里却只有两个集合。如果说集合与表一一对应的话,那么图2中应该也有4个集合才对,为什么可以把本应该是集合的address和scores直接合入了集合students中?原因就在于在Key-value型的数据库里,数据模式是自由的。

以scores来说,在关系型的数据库设计中将其单独成一个表是因为student与score是一对多的关系,如果将score合入student表,那么就必须预留最多可能的字段,这会存在浪费,并且当以后新增一门课程时扩展困难,因此一般都会将score表单独出来。而对于Key-value型的数据库就不同了,其scores字段就是一个BSON,该BSON可以只有一个for_course,也可以有两个、三个、任意个for_course,其固有的模式自由特性使得它可以将score包含在内而无需另建一个score集合。

       对于与student为一对一关系的address表也可以直接合入student,无需担心address的扩展性,当以后需要给address新增一个province字段,直接在数据插入时加上这个值即可。

        当然,对于与student成多对多关系course表,为了减少数据冗余,可以将course建立为一个集合,同关系型的数据库设计中类似。

        对比于关系型的数据库,在Key-value型的数据库里将数据合入一起有几大好处:首先,数据检索时没有了进行表间连接(join)的巨大开销(虽然目前MongoDb中没有join的概念);其次,合入一起的数据在磁盘上的存放也更容易在一起,因此数据的读取/写入都更快速。另外,无需担心扩展性问题,Key-value型数据库的自身特性使得字段的增删改十分容易。

关系型数据库与Key-value型数据库Mongodb模式设计对比

关系型数据库与Key-value型数据库Mongodb模式设计对比         MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(Schema Design)上的差...
  • lzqinfen
  • lzqinfen
  • 2014年12月09日 13:42
  • 551

关系型数据库与Key-value型数据库redistribute和文档性数据库Mongodb模式设计对比

MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(Schema Design)上的差别,正是由于这一层次的差别衍生出其它各方面的不同。     我们可以简单的认为关系型数据...
  • bzhxuexi
  • bzhxuexi
  • 2014年09月16日 17:26
  • 1139

关系型数据库到文档型数据库的跨越

在文档型NoSQL数据库出现之前,许多开发者一直绞尽脑汁思考,希望能想出更好的处理关系型数据库技术的方法,如今他们可能要跳出那种思维而另辟蹊径。本文将介绍关系型数据库和分布式文档型数据库的区别以及在应...
  • qq_16912651
  • qq_16912651
  • 2016年12月07日 17:56
  • 681

大数据时代的 9 大Key-Value存储数据库

在过去的十年中,计算世界已经改变。现在不仅在大公司,甚至一些小公司也积累了 TB 量级的数据。各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限。        ...
  • elf8848
  • elf8848
  • 2014年10月09日 10:57
  • 1659

对象数据库与关系数据库利弊谈

在20世纪60年代后期引入的面向对象技术引起了一场革命。到20世纪80年代后,面向对象的技术已经成为 了行业的主流,其原因多种多样:面向对象不仅简化了界面的开发,而且也提供了一种更加灵活、简单数据处理...
  • hdy007
  • hdy007
  • 2007年02月06日 09:41
  • 3731

与关系型数据库相比,MongoDB的优缺点

与关系型数据库相比,MongoDB的优点: ①弱一致性(最终一致),更能保证用户的访问速度: 举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下...
  • huanghai200911
  • huanghai200911
  • 2015年06月03日 16:56
  • 1018

以MongoDB为例与关系型数据库比较

声明:本文属于探讨性话题,肯定存在很多疏漏和错误,不要盲目相信,大家发现什么错误或者有什么想法请求务必告知 在比较之前,先介绍一个重要的概念:数据库事务 作为单个逻辑工作单元执行的一系列操作...
  • manongpengzai
  • manongpengzai
  • 2017年08月09日 10:57
  • 256

关系型数据库到MongoDB的战略迁移 - MongoDB大中华区首席架构师唐建法专访

数据库作为最关键的基础设施,渗透技术领域的方方面面。随着互联网时代的信息高速膨胀,传统关系型数据库因其高门槛、高成本以及扩展性差等原因导致的局限性逐渐浮出水面,如今更是面临诸多问题和挑战,在这一大环境...
  • f2006116
  • f2006116
  • 2017年05月03日 15:16
  • 517

多维数据库&关系型数据库详细介绍

转载自:http://bbs.pinggu.org/thread-4164420-1-1.html 多维数据库&关系型数据库详细介绍                          ...
  • weinierzui
  • weinierzui
  • 2017年03月15日 19:58
  • 1972

非关系型数据库和关系型数据库区别,优势比较?

非关系型数据库和关系型数据库区别,优势比较?原文地址http://www.bieryun.com/893.html 非关系型数据库的优势: 1. 性能 NOSQL是基于键值对的,可以想象成表...
  • qq_37450024
  • qq_37450024
  • 2018年02月04日 18:36
  • 48
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关系型数据库与Key-value型数据库Mongodb模式设计对比
举报原因:
原因补充:

(最多只允许输入30个字)