数据库扫盲

微信公众号:Vegout

如有问题或建议,请公众号留言

数据库技术的诞生

“上古”时期,计算机还处于幼年,当时对于数据的管理效率很低,也许一个程序会产生一些数据,但计算机所干的事,就是大量的计算工作,计算之后得到一定的结果,人工再把结果记录下来,因此,数据只会在内存中出现。慢慢的,计算机所干的事变的复杂起来,复杂计算的中间结果需要记录,大量的中间结果如果交给人工来记录,出错的可能性就大大提升了,于是,时代弄潮儿想到的办法就是把中间结果数据直接存到文件里边,需要的时候再直接去取,于是数据与程序的半分离成为了可能,为什么叫“半分离”呢?因为具体文件的存储格式和具体应用的逻辑结构有很大的相关性。对与一份存有数据的文件来说,可能只能被特定的程序使用。后来,程序之间的协作变得频繁起来,程序之间交流的媒介就是数据,多程序共享数据成为了刚需!于是,数据库技术应运而生!

数据库说到底还是把数据存到了文件里边,只不过这些文件的如何存和取不需要我们直接干涉,而是通过DBMS(DataBase Management System),比如mysql,sqlserver,oracle,DB2等约定好的命令格式(sql)来存入或得到我们想要的数据,从此数据和程序达到了“全分离”状态。令人开心的是,标准sql是通用的,每一种DBMS都支持标准sql对数据进行操作。DBMS是针对关系数据库的概念,而近几年随着对系统性能要求的提高,分布式系统的设计与发展,非关系数据库开始登上历史舞台。下边浅谈这两种数据库。

关系数据库和非关系数据库

对与关系数据库,不得不提一个人————Edgar Frank Codd。在1970年提出关系数据库的概念,被称为关系数据库之父。关系数据库外观就像一个二维表格一样,通过列和行对数据进行组织和存储,当然这里的存储指逻辑层面的存储,具体在磁盘中怎么存储的还要看DBMS的具体实现。每个表内我们都可以定义某种关系来约束数据的存储形态,比如非空约束等,表与表之间也可以定义多种关系,比如外键关联。总之关系数据库最重要的就是数据的“关系”,基于这种关系,我们可以运用sql进行各种复杂的操作(也许你想起了当年被老师逼迫写下的四十米长的sql查询语句),这种对数据进行复杂操作的能力是非关系型数据库不可比的,但同时,关系型数据库也有他的短板,他的这个短板造成了很多系统的性能瓶颈,这个短板就是————访问速度!关系型数据库绝大部分情况,数据都需要存在磁盘中,当我们需要数据时,需要访问磁盘来提取数据,而对磁盘的访问速度是令人抹泪的。于是非关系型数据库就对此进行了补充,非关系型数据库大多数以键值对的形式将数据存储在内存中,这个访问速度的提升不是一丁半点,就像是驴车换成了火箭。我们可以同时使用两种数据库,非关系数据库对关系数据库查出的数据进行一个缓存,减少访问磁盘的次数,就可以大大提高系统的性能,当然,现实中我们也是这么做的。常用的非关系数据库有redis, MongoDb等。使用了非关系数据库,并不是一劳永逸,解决老问题的同时也带来了新问题,如我们缓存起来的数据何时进行跟新,一致性如何保证都是需要解决的问题。

总之,Edgar Frank Codd是伟大的,他提出的关系数据库在互联网迅速发展的时代半个世纪经久不衰真是太可贵了!迄今为止关系数据库任然是主流数据库,对与海量数据的持久化存储关系数据库任然是不二选择,只是对与那些对与高并发要求很高,对数据暂时不一致可以容忍,对响应速度要求很快的应用来说,非关系数据库确实可以帮上大忙。

如果您喜欢这篇文章

期待您的关注

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180607G0EVNF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券