你好,游客 登录
背景:
阅读新闻

关系型数据库为什么能活这么久?

[日期:2018-05-10] 来源:  作者:刘欣 [字体: ]

  我就是你们常用的关系型数据库, IBM的研究员E.F.Codd 于1970年把我的理论带到这个 上,我已经快50岁了。

  我的家族成员居住在 各地性能强悍的服务器中, 保存着你们人类的大量珍贵的数据,从你的银行余额,到你的购物清单,几乎每 笔网上交易都有我们负责保存。

  我是如此重要,几乎每 位软件从业者都需要认真学习,很多时候我都是存储大量数据的,你要做的,就是选择 个我的家族成员而已,比如:Oracle, MySQL, Db2,SQL Server这些家伙。

大数据

  对了,还有 个小巧玲珑的SQLite,做手机端开发的离不开它。

  在日新月异的IT界, 门技术居然能存活这么久,实在是不可思议。

  也许会有人想到这个问题: 你为什么能活这么久?

  简单地拍脑袋想 想,也许是我能够大规模地保存和检索数据? 但是直接使用文件系统也可以啊?

  为什么要数据库? 还“关系”?

  不,我能活这么久,是有 些独门秘籍的。

  1.我有着坚实的数学基础

  这可真不是我吹牛,我的身上处处显示着的数学身影:

  域,关系,笛卡尔积

  关系代数:选择,投影,连接

  ......

  对了,你知道啥叫“关系”吗? 面试官如果问你的话你该如何回答?

  其实所谓关系,在数学上的定义就是笛卡尔积的 个子集。

  例如有两个集合:

  s1 ={a,b}

  s2 = {1,2}

  那s1和s2的笛卡尔积就是 :

  s1 × s2 = {(a,1),(a,2),(b,1),(b,2)}

  那么S 的任意 个子集都是关系:

  {(a,1),(a,2)} 是 个“关系”

  {(a,2), (b,1),(b,2)} 是另外 个“关系”

  {(b,2)} 也是关系

  ......

  如果你把s1和s2竖起来看,把s1看做列x能取值的集合, s2看做列y 能取值的集合, 那(x, y)它不就是 张表吗?

  我还有个很漂亮的性质:

  关系(表)经过运算以后,如select,join,where,交、并、差,结果还是 个关系(表)!

  你看我的数学基础是不是很牢靠?

  2.我很直观

  少表面上看起来是这样的,如果你想给 个非计算机专业的人讲解数据库,可以和Excel类比下, 看看他能不能听懂: 瞧, 这不就是个表格吗,有行有列的。

  3.使用简单

  这里不得不说说SQL这个优秀的抽象层,它完全屏蔽了底层的实现细节,你完全不用考虑底层的文件是怎么存放的,只要发出SQL : SELECT ...... FROM ...... WHERE ...... 就好。

  相比于早期复杂的层次状,网状数据库, SQL实在是太简单了。

  不仅仅是开发人员,你们的业务人员稍加培训就可以写SQL, 我清晰地记得有个业务分析师经常去数据库查数据,然后告诉程序员说数据不对,有Bug, 让程序员非常头疼。

  4.对数据完整性的支持很好

  我的每个字段都有确定的类型,还可以检查数据的长度,取值范围。

  我的主键和外键,共同保证了数据的精确性和 致性, 防止数据的缺失。

  5.我支持事务!

  这可能是我能成功的 大关键了, ACID对于核心系统的数据(如银行账号)无比重要,不难想象 个转账操作没有完成会带来什么样的影响。

  6.范式

  想要使用我们关系型数据库,必须得遵守 定的规则,这些规则就是“范式”。

  第 范式是基本要求,即每个列都是不分割的数据项, 如果连这个都满足不了,还是洗洗睡吧。

  范式要求实体属性要完全依赖主键,不能依赖部分主键。

  第三范式就是 个表中不能包含其它表中已包含的非主关键字信息。不严谨地说就是这个表只包含其他表的ID。

   般来说,你们都会遵循第 和范式, 但是为了性能,为了避免过多的join, 有时候会违反第三范式,冗余 些字段的信息, 这我都可以理解。

  7.大家用我做“数据的集成”

  这是大牛Martin Fowler 提出的观点:

  企业 应用程序居于 个丰富的生态系统中,它需要与其他应用程序协同工作,而那些程序是由不同的团队合作开发出来的。

  不同的应用程序经常要使用同 份数据, 而且某个应用程序更新完数据以后,必须让其他应用程序知道这份数据已经改变了。

  采用”共享数据库集成“ ,多个应用程序都将数据保存在 个数据库中,所有的应用很容易就能使用彼此的数据了。

  8.遗留数据

  几十年来,我这里积累了大量的应用数据,虽然说城头变幻大王旗,访问关系数据库的应用程序变了好几茬,编程语言也换了好几波,但是关系数据库中的数据岿然不动,他们的寿命远远超过应用程序的寿命, 数据变成了 个企业宝贵的财富。

  但是 上没有的东西, 我虽然有众多优点, 但是也有不少缺点。

  在互联网时代, 在高并发,大流量的映衬下,这些缺点显得格外刺眼:

  对分布式系统支持不好, 难于组成集群,水平扩展比较难。

  复杂的类型(XML、JSON等)不好表达。

  应对互联网的海量请求力不从心。

  ......

  为了应对这些问题,你们人类可以说是想了很多办法,比如什么NoSQL数据库,什么分库分表,在比如你们发展了BASE理论,不追求ACID中的强 致性,只要达到“基本可用”,较终 致性就可以了。

  但是我不得不说,对于核心的数据,交由我来保管才是正道。

  我已经快50了,不知道能不能再活50年,但是再活20年我觉得是没问题的,所以,我建议你还是好好学习 下吧。





收藏 推荐 打印 | 录入:Cstor | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款