从需求出发来看关系模型与非关系模型--关系模型与非关系模型概述

自从NoSQL概念横空出世,关系数据库似乎就成了众矢之的,似乎一夜之间,关系数据库和SQL就成了低效,高成本,速度慢的数据处理模式的代名词。 在很多地方都能看到类似:"我的项目初创,应该选择什么NoSQL产品才能快速的开发?" 这样的问题。 

 

正因有人提出这样的问题,才坚定了我把这篇文章放在了第一章的决心。主要的目标是希望借助这样一个形式,让大家能够比较清晰的认识到类似NoSQL,SchemaFree,RDBMS,CAP,BASE等等概念的本源,并了解到他们面对的主要场景,从而避免乱花渐入迷人眼的尴尬,知其然而知其所以然。

 

其实,软件中所谓的对象,结构体,实体,关系等概念,都只是对现实生活中的一种抽象。因为人类太过渺小,渺小到无法真正的理解和模拟这个世界,所以不得不创造出一些概念,过滤掉具体的细节而只关心他们所需要关心的事情。 这就产生了各种各样的抽象。

 

而SQL和关系模型,就是针对数据之间的“关系”而进行的一种抽象。

 

简单来说,他将一切事物都抽象为关系,并通过集合运算的方式规定了关系之间的运算过程,也因此更为严谨。比如,描述一辆车有四个轮子和四扇玻璃,那么就可以建立三张表格,一张存车的属性,一张存玻璃的属性,一张存轮子的属性,并且在轮子和玻璃的表格中,冗余车的唯一标示。这样就可以完成关系描述。如果要读取车A.id = 5车子的左前方轮子的出厂号码标示,做法一般是:查询轮子表,找到车子id=5的并且标有左前方属性的那行数据,读取他的出厂号码。

 

了解了关系模型,我们再来看看在关系模型产生之前,大家经常使用的层次模型吧。

层次模型其实也是非常简单的一类描述 ,还以车为例, 一辆车有唯一的标示(可以是个id,也可以只是个入口引用),然后车节点有两个子节点,一个是轮子集合节点,一个是玻璃集合节点,然后,轮子集合节点有四个节点,分别表示四个轮子,而玻璃集合有四个节点,分别标示四扇玻璃。如果要读取车A.id = 5车子的左前方轮子的出厂号码标示,做法一般是:找到顶节点车A,然后查找该节点的子节点,轮子集合节点,然后遍历4个子节点,找到标有左前方属性的车轮,读取其出厂号码。

 

从上面简单的例子对比来看,相信大家立刻就能看出关系模型与传统的层次or表格模型的最大差别。也就是用户不再需要关注从车->轮子集合->轮子本身,这个存取路径只需要关注于核心的查询逻辑(车子id=5 , 车轮属性是左前方),就可以立刻找到数据了。 使用关系模型,因为模型相对的比较简单,并且数学证明比较严密,所以很快被大家接受。

 

因此在市面上已经很少出现层次模型or网状模型了。

 

在互联网时代之前,数据库的研究领域更多的集中在关系模型与前端业务开发模型不匹配这个问题上, 众所周知的, 在面向对象的语言产生之后,继承,多态,充血模型已经成为了程序语言的标配,我们在这里不去讨论是面向对象好,还是函数式编程好这样没结论的问题,只来简单的浏览一下面向对象与关系模型的阻抗失配问题即可。

如果大家写过业务逻辑,一定也会觉得把数据库里的数据转变为程序对象是一件蛋疼无比的事情吧。将面向对象里面的继承和组合这类概念硬套到关系数据库上,需要耗费比较大的精力才能完成。

 

为了解决这些问题,一种思路是在程序层做这个ORMapping的转换,这类工具主要是hibernate、ibatis等工具。另外一个思路是在数据库层面做这件事,比如oracle一直宣传自己是ORDBMS。甚至甚至,连脚本语言框架比如ROR , django的核心目标之一也就是解决这个阻抗失配的问题~

 

因为类似java/c++/.net这样的语言是静态编译的,所以就必须要求用户要在代码中明确的定义对象的属性名字和类型,而在数据库内,也有一套对应的列名和数据库类型信息。 一张表有50多个字段,每次字段变更,都必须保证用户代码内的对象内的属性和数据库中的数据准确对应。这非常消耗时间,也非常容易错。

 

为了解决这个问题,要么是从程序代码生成关系模型,要么是从关系模型反向生成程序代码。 这两种方式都会面临程序逻辑与关系模型不匹配的问题,于是写ORMapping就成了一件蛋疼无比但又不得不做的事情。

 

为了自动化,有大量的工具组件出现在这里,比如hibernate,比如ibatis,他们主要作用就是将我们的对象模型转换为关系模型,不过这类工具最大的问题就是,学习工具本身的成本很高,甚至高于自己去做对象关系映射本身,而且经常会因为对ORMapping掌握的不够精深,造成很多低效的查询,拖慢了整体性能的问题。

 

还有一些人为了偷懒,放弃使用对象bean来表示数据库中数据。他们一般会采用Map映射来表示数据库中一行数据,使用这种方式,Map的key就是列的名字,value就是列的值,如果要表示多行数据,那么就是一个List<Map>的结构。使用这种结构,程序就可以自动的根据数据库给出的列名原信息来自动生成Map结构。但这种方式的问题是,丢失了面向对象所带来的良好的封装特性,经过多层传递与处理后,用户很难辨识哪些是数据中间过程数据,哪些是数据库原始数据。数据Map对象会膨胀的非常厉害,以至于无法管理。

 

脚本语言的核心目标之一也就是解决这个阻抗失配的问题, 脚本语言因为是动态编译的,所以动态对一个对象增加或减少属性变得非常简单而清晰,所以对象内的数据可以直接根据数据库内的数据进行内省获得,不在需要人工维护,同时又不会出现因为Map结构所导致的代码结构不清晰的问题,所以ROR这类的工具可以直接进行对象关系映射,极大地提升了小业务系统的生产力。

 

可惜,对象数据库和xml数据库,都没有形成一统天下的新浪潮,一直不瘟不火的缓慢发展着。 

 

 

随着互联网的爆发式发展,数据库概念领域又一次发生了摇摆,伴随着互联网的特殊需求,一批有着新鲜血液的NoSQL数据库涌现了出来,层次模型又从封印中苏醒,站在了大家面前。

 

这里就自然而然会有一系列的疑问产生了出来,为什么层次模型变种的NoSQL会出现并得到了一些人的认同?他满足了什么需求? 关系模型在什么地方不能满足大家的需求了?

 

那么,我们就从应用场景出发,尝试回答一下这些问题吧。

时间: 2024-11-26 19:12:45

从需求出发来看关系模型与非关系模型--关系模型与非关系模型概述的相关文章

从需求出发来看关系模型与非关系模型--时代的变革1

上次我们谈到,因为互联网应用的实际需求与传统数据库之间出现了不匹配的情况.   于是,破坏与重构就成为了新时代的主音.   对互联网应用而言,最急需的需求,就是处理大量用户输入的海量数据,进行一些逻辑处理后再将结果返回给用户.因此,对于在线数据处理来说,可水平扩展的容量指标,可无限增长的写入tps和读取qps,是互联网企业的最大,最急需的需求.   相比较而言,为了追求性能和容量的尽可能最大化,其他的指标则被迫的推到了后面.这也非常容易理解,性能不够,容量不够,直接面临的是不能提供服务,作为互联

《原来如此》第四十七期:混合云从业务需求出发 构建统一管理平台

:云计算是现在企业真真切切开始做的事情,大中型企业更多构建私有云,小微企业更多采用公有云,当然混合云的趋势也越来越明显,但在这个过程混合云也给企业带来了多种问题,像两朵云不能互通,或不能形成统一管理平台等.ZDNet至顶网也请到中桥国际总经理兼高级分析师王丛来解析,中国云市场的发展走势,以及如何从业务需求出发混合云,构建统一的云管理平台. 以下为采访实录: 主持人:各位网友大家好,欢迎收看ZDNet至顶网视频节目,今天我们很高兴请来了中侨国际的总经理兼高级分析师王丛,请跟我们网友打个招呼. 嘉宾

黄伟:互联网+教育围绕教育需求出发

本文讲的是黄伟:互联网+教育围绕教育需求出发,伴随着互联网+浪潮的兴起,经过近一年时间的孕育,互联网+正席卷到各个行业,以教育行业为例,随着移动.大数据.云计算.物联网等新一代信息技术为基础的互联网+在教育领域的广泛应用,中国教育信息化迎来以"智慧化"为特征的新阶段,互联网+教育正在开创教育行业新未来. 智慧教育是教育信息化的全面"升级",是指在教育领域(教育管理.教育教学和教育科研)全面深入地运用现代信息技术来促进教育改革与发展的过程.其技术特点是数字化.网络化.

炎龙COG陈居丰:从市场需求出发培养用户

第六届中国网页游戏&移动游戏高峰论坛将于4月25-26日在中国嘉兴召开,大会将邀请国内众多知名厂商与高层出席,旨在推动中国网页与移动游戏更好的发展,受大会主办方邀请,炎龙COG总经理陈居丰先生将出席本次大会,并在大会上做主题演讲;会议召开前夕,炎龙COG总经理陈居丰先生接受游戏频道记者专访: 您好,请您先简单介绍一下贵公司的基本情况以及游戏产品.2013年贵公司会有哪些新游戏上线,介绍一下公司目前这些游戏产品的状态. 陈:炎龙COG是一家从事游戏开发与游戏海外发行业务的公司,旗下的研发团队分布在

从目前的情况来看,承载腾讯国际化的是微信而非手机QQ

虽然从目前的情况来看,承载腾讯国际化的是微信而非手机QQ,不过最近推出的手机QQ国际版,却在功能上向国际化迈出了一大步.新版的"QQ International"内置了7种语言,可以将聊天消息实时翻译成外语,支持包括繁体中文.英语.韩语.日语.法语.阿拉伯语在内的19种语言. "QQ International"和普通的手机QQ差别不大,但在功能上更加简洁.如不支持贴图表情.不支持游戏和阅读,也没有引入服务中心.不过QQ International最大的亮点在于,可

优使性设计养成专栏&#8212;从需求层级来看优使性

原文为繁体,转载时翻译为简体,传送门:原文 关于优使性,我们最常听到的解释可能是』好用』.』易用』(ease-of-use).』可用』,然而,以〝好用〞来定义优使性似乎有些不足(用』可用』作为解释就更奇怪了,因为感觉好像与』堪用』很类似),因为好用只能说是构成优使性的原素之一,如果以各种不同的需求层次来分析,也许能够更清楚的了解优使性的定位. 美国人本主义心理学家亚伯拉罕·马斯洛(Abraham Maslow)在1954年时提出著名的需求层次理论(Need-hierarchy theory),这

SNS领域的初步探索:非流失用户及流失用户的相关模型

文章描述:用户研究思路概述:以淘宝网SNS"分享"为例. 事发突然: 今年8月份,发神经般的在微博上点开了一个广告链接,发现某美妆品牌的东西性价比很高,于是成功购买.这是我在SNS的网站上达成的第一笔交易,拿到钟爱的护肤品,突然发现:我居然没有在"我的淘宝"的"好友动态"里点击过别人分享的东西,更别提购买了.于是,有了这次的研究. 一.立项: 基于以上想法,本打算研究SNS用户习惯及动机(没有限定在淘宝网),希望能通过照片日志(Photo Dai

需求出发打造“合身”的文件服务器

文件服务器已经成为企业http://www.aliyun.com/zixun/aggregation/14162.html">IT架构的重要组成部分,无论中小型企业或者是大型企业它都是需要的.通过文件服务器将文件或者文档集中存放,在方便用户查找使用文档的同时,更方便文件服务器管理.而文件服务器架设中最常见的文件服务器方案就是win2003文件服务器,通过它搭建一个文件服务器是一件轻而易举的事情.但是在实际的应用中,不同的企业有不同的需求或者一些特殊应用,这是让管理员头痛的事情.下面笔者就列

部署SDN:还是要从企业需求出发

软件定义网络(SDN)被视作互联网的秘密武器.尽管SDN面临发展疲软,技术出现问题等状况,不过到目前为止,企业仍对其兴趣满满. 这可能是由于SDN带来的节省成本.提高安全性并实现真正的敏捷的优势.不过话又说回来,这种高复杂性以及惊人的许可成本的SDN真的是企业想要的吗? 虽然部署SDN和SDDC带来的好处足够诱人,但也带来了新的挑战.在真正迈入SDN之前,仍有企业需要解决的一些关键点. 你的企业IT团队关注KTLO,保持灯一直亮的时间是多久?如果IT团队无法解决新的要求,那么自然也没有时间来处理