下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:693发布时间: 2017-06-11 14:00:57

标签: 数据库关系型数据库文档型数据库

  随着数据库技术在应用领域的不断拓展,人们发现关系型数据库的许多限制和不足,因而数据库技术进入了“后关系数据库时代”。在文档型NoSQL数据库出现之前,许多开发者一直绞尽脑汁思考,希望能想出更好的处理关系型数据库技术的方法,如今他们可能要跳出那种思维而另辟蹊径。本篇将介绍关系型数据库和分布式文档型数据库的区别以及在应用开发上的一些建议。

  首先,我们先来明确他们各自的定义:

  关系型数据库

  关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

  文档型数据库

  从1989年起,Lotus通过其群件产品Notes提出了数据库技术的全新概念-"文档数据库",文档数据库区别于传统的其它数据库,它是用来管理文档。在传统的数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的基本单位。一文档可以很长、很复杂、可以无结构,与字处理文档类似。一个文档相当于关系数据库中的一条记录。

  文档数据库与五、六十年代管理数据的文件系统不同,文档数据库仍属于数据库范畴。首先,文件系统中的文件基本上对应于某个应用程序。当不同的应用程序所需要的数据有部分相同时,也必须建立各自的文件,而不能共享数据,而文档数据库可以共享相同的数据。因此,文件系统比文档数据库数据冗余度更大,更浪费存储空间,且更难于管理维护。其次,文件系统中的文件是为某一特定应用服务的,所以,要想对现有的数据再增加一些新的应用是很困难的,系统不容易扩充。数据和程序缺乏独立性。而文档数据库具有数据的物理独立性和逻辑独立性,数据和程序分离。

  文档数据库也不同于关系数据库,关系数据库是高度结构化的,而Notes的文档数据库允许创建许多不同类型的非结构化的或任意格式的字段,与关系数据库的主要不同在于,它不提供对参数完整性和分布事务的支持,但和关系数据库也不是相互排斥的,它们之间可以相互交换数据,从而相互补充、扩展。

  1.为什么要转变?

  人们通常都不愿意改变,因为改变总是痛苦的,除非它能显著解决一些问题。随着大数据的发展,我们越来越有必要开始对数据模型做出转变了。换句话说,这种转变的需求愈发的强烈,因为大数据时代不管是对于数据库的扩展模型还是数据模型都要求极高的灵活性。

  1.1扩展模型

  关系型数据库是一种“纵向扩展”的技术,想要扩展容量(无论数据存储还是I/O),都需要更换更大的服务器。现代应用结构的解决却是使用“横向扩展”----无需新购买更大的服务器,只需要在负载均衡器下增加一般的服务器、虚拟机或是云服务器就可以实现扩展。此外,容量在不再需要的时候还可以轻易的缩减。事实上,“横向扩展”在应用逻辑层的使用已经很广泛了,只是数据库技术上刚刚赶上而已。

  1.2数据模型

  NoSQL“横向扩展”部署方案的优点已经受到了业界的注意,但是同时很多人忽略的是NoSQL数据管理的简洁,不需要很复杂的操作模式构建,这一点对于数据库的提升也和扩展模型一样重要。在使用传统关系数据库时,添加数据前,需要定义操作模式。之后每一条记录的加入都需要严格的按照定义的操作模式进行,比如固定的列数和数据类型。因此,改变那些分区关系型数据库的操作模式,会非常的麻烦。如果你的数据获取和数据管理需求经常变化,那这种严格的模式限制将会成为制约表现的屏障。

  NoSQL(无论文档型、列式、K-V等等)都是水平扩展的,它们都不需要预先定义操作模式、所以也不需要在需求改变时改变操作模式。

  接下来我就将使用SequoiaDB来介绍文档型NoSQL数据库技术:

  2.数据模型:关系型vs.文档型

  下图就对比了四条记录在关系型和文档型数据模型下的存储情况:

  2.数据模型:关系型vs.文档型

  下图就对比了四条记录在关系型和文档型数据模型下的存储情况:

  2.数据模型:关系型vs.文档型    下图就对比了四条记录在关系型和文档型数据模型下的存储情况:

  在上面的例子中,数据库用来存储错误日志信息。每个错误记录(表1中的一行)由3部分组成:错误号ERR,错误发生的时间TIME,和错误发生的数据中心DC。为了避免重复记录所有的错误记录的数据中心信息,现在每条错误记录将都指向表2(数据中心信息)中的对应的地点那一条记录。这样就不需要实际存储具体的DC信息在表1中,需要使用时只要到对应的表2行获取就可以了。

  在关系模型当中,多个表中的不同记录经常“交错连接”,一些数据会被多条记录共享。这样的好处就是减少了重复数据的出现,但是这样不好的地方就是一旦其中某一条链接的记录发生改变,那么与其相关的记录和表都会被锁住以防止非一致性的出现。ACID事务在关系型数据库中是很复杂的,因为数据会扩散。即便是单一条记录,这复杂的共享数据内部关系网的存在,也使得关系型数据在多个服务器之间的传递变得复杂而缓慢,同时让读和写操作的性能变差。

  当存储空间昂贵又稀少时,折中的权衡方案是很必要的。然而,如今存储空间的价格跟40年前相比已经大大的下降了,很多时候计算折中方案已经完全没有必要。使用更多的存储空间来换取更好的操作性能,或者是将工作负载分配到多台机器上,这才是如今应用上更好的解决方案。

  2.2文档型数据模型

  使用“文档”这个词似乎让人觉得奇怪,但是其实“文档型数据模型”真的和传统意义的文字“文档”没有什么关系。他不是书、信或者文章,这里说的“文档”其实是一个数据记录,这个记录能够对包含的数据类型和内容进行“自我描述”。XML文档、HTML文档和JSON文档就属于这一类。SequoiaDB就是使用JSON格式的文档型的数据库,它的存储的数据是这样的:

 2.2文档型数据模型    使用“文档”这个词似乎让人觉得奇怪,但是其实“文档型数据模型”真的和传统意义的文字“文档”没有什么关系。他不是书、信或者文章,这里说的“文档”其实是一个数据记录,这个记录能够对包含的数据类型和内容进行“自我描述”。XML文档、HTML文档和JSON文档就属于这一类。SequoiaDB就是使用JSON格式的文档型的数据库,它的存储的数据是这样的:

  可以看到,数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的。这就使得记录很容易完全移动到其他服务器,因为这条记录的所有信息都包含在里面了,不需要考虑还有信息在别的表没有一起迁移走。同时,因为在移动过程中,只有被移动的那一条记录(文档)需要操作而不像关系型中每个有联系的表都需要锁住来保证一致性,这样一来ACID的保证就会变得更快速,读写的速度也会有很大的提升。

  3.文档型数据模型的应用

  你可能需要一段时间去忘记以前的习惯,不过不要害怕,了解其他方面的知识可以让你更充分的利用你已经学会的知识,不管怎么样最能解决问题的才是最好的。了解了不同的方法,你才可以选择最适合的!

  3.1模型

  在应用中,数据对象是核心的部分-----也是模型视图控制器(MVC)中的模型层。当分析一款应用时,现在你可以先把目光停在对象关系映射层(ORM)上。与其将不同的模型定制成为不同的表和行,不如都用JSON格式存储成文档形式吧,每个JSON文档都有唯一的id方便查找。

  3.2键

  在文档型数据库中,每个JSON文档的ID就是它唯一的键,这也大致相当于关系型数据库中的主键。通常ID在一个数据库“集合”中是唯一的(NoSQL中,类似RDBMS的“表”的分类结构有很多种,如SequoiaDB的集合Collection或者是Couchbase的bucket)。

  一些NoSQL数据库会用ID排序,那么相近ID的数据自然更容易被检索到,经常需要一起调用的数据放在一起可以大大提升处理的速度。

  3.3灵活性

  如今的社交网站越来越普及,而随着用户量不断壮大,每个用户的使用方式或者是发布的内容类型都不尽相同。有人会发布风景照片、有人发布对时事的评论还有人分享音乐表达心情。面对如此大量而多样性的数据,如果使用关系型模型,就需要不断你的修改数据操作模式,这样,可能会引起系统负载的大大提升,同时也会大大增加处理的时间。

  这时,文档型模型存储就凸显其优点了,面对复杂多变的数据,使用文档型模型就直接保留了原有数据的样貌,不需要另外创建新的表新的操作模式来处理,这样不仅存储直接快速,再过后调用时,也可以做到“整存整取”,不需要关系型模型那样再到各种链接的表上取出需要显示的记录。在RDBMS中,需要尽可能的标准化数据。而在NoSQL中,则是可以尽可能的对数据“去标准化”。

  3.4并发性

  接着上一个例子,在社交网络当中,用户的操作量很大,许多人每天会花很多的时间泡在社交网络之中。使用传统关系数据模型时,例如,两个用户的发布信息同时链接到了“地点”,那么其中一个人回头修改自己的发布时,因为链接到了“地点”表,系统为了保证一致性就会把“地点”表锁住不让其他用户同时提出修改,这时另外的用户暂时就没办法操作“地点”表了。

  如果使用文档型模型,每个人的发布就是独立的一个“文档”,这一个文档文件就包含了这一条发布的所有信息。因为这种“自包含”的特性,不同的用户修改数据只需要修改自己的文档而不会影响别人的操作。这样就实现了高的并发性!

  4.结论

  关系型数据模型的复杂查询操作,倚赖的是数据库模式的严格一致,数据的标准化以及数据的合并。在过去的40年中,关系型模型和查询技术已经发展成熟也被众多的开发者所熟悉。

  但是,应用、用户和基础的特点的变化使得应用开发者和架构师开始选择“NoSQL”这种非关系型的数据库技术,许多观点认为分布式文档数据库技术在很多方面都要胜过RDBMS:

  ①它可以轻松的通过普通机器、虚拟机或者云实例来实现近乎无上限的水平扩展。

  ②添加数据是他不需要严格的数据库操作模式,因此在修改数据类型时自然也不需要修改数据库模式。

  ③多样化的数据模型能更好的的支持复杂数据的建模、存储和查询。

  虽然,数据的去结构化可能会使用到更多的空间,但随着存储空间价格的不断下降,存储空间和读写速度的比重势必将越来越像追求速度一方倾斜,而由此带来的高性能、可扩展性以及灵活的数据结构等优点又将大大提升应用的各方面性能表现。

  SequoiaDB的数据模型就是以JSON格式存储的文档型模型,所以SequoiaDB具备了文档型和NoSQL数据库的数据灵活性和高可扩展性。SequoiaDB的文档型数据模型不仅简化了数据存取的过程,也大大的提升了数据的灵活性。在应用中不仅免去了设计模式这个麻烦的环节,还能很好的适应大数据时代高并发、实时性和分布式的要求。

  关于SequoiaDB

  SequoiaDB作为NoSQL数据库,重新设计了数据的管理方式,并推动了大数据行业的发展。SequoiaDB数据模型的设计,使用户能够更加敏捷地开发易扩展的系统架构。SequoiaDB支持多种类型的应用,提供了良好的用户体验,加速产品发布时间,并降低企业的运营成本。

  小编结语:

  更多内容尽在课课家教育!

赞(12)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程