您的位置:首页 > 数据库

数据库技术介绍

2016-06-13 09:19 531 查看
数据库技术发展历史

计算机相关技术的发展不断地改变人们对于信息处理的观念,早期的计算机更多利用了计算能力足够强大的优势,数据量并不大,因此采用人工管理的方式输入要处理的数据和保存计算后的数据,随着计算机系统逐渐走向自动化,并且越来越多的数据需要集中统一便捷的管理,大批量的数据需要计算机去运算,也要适当的保存处理后的数据,因此对于数据存储的需求开始出现。整个数据管理的历史总结为几个重要的阶段:人工管理、文件系统、数据库、分布式数据库。

早期的数据库使用卡片穿孔的方式去管理数据,进行物理的存储方式。后来发明了可以一次性输入上百条数据的磁带驱动器。这样的变化开始了数据管理的革命。后来IBM公司发明了磁盘技术,不仅加大了数据传输和存储的数据量,也可以随机访问数据,而磁带只能顺序访问。

磁盘和磁带技术的应用可以一定程度上方便数据的存储和传输,但是数据的管理还不是很方便,由于需求推动,各种数据库管理系统开始诞生(DBMS)。数据库管理系统就是介于用户和数据库之间的一个中间件,用户不用关心底层存储的物理复杂性而在一个更抽象的层次去管理数据。但是DBMS是有对应的数据存储模型的,在DBMS流行期间,主流的三种数据存储模型有三种:层次模型、网状模型、关系模型。

由于此时的数据存储更多的是面相应用程序的,因此很难去控制数据的一致性完整性和数据共享等问题,不能共享导致不同的应用需要重新绘制数据,造成了数据冗余,数据无法独立,导致存储结构或则物理层发生变化都要去了解数据结构重新定义,这给数据管理造成了极大的不便。这个时候主要特点:没有数据管理软件,数据冗余,数据不够独立,批处理的方式。

文件系统阶段,这个阶段出现了文件管理系统,数据有一定的独立性,避免了因为物理的改变导致数据不可用,对于程序也有了一定的独立性,多个程序可以通过统一的接口去访问文件系统。但是这个时候的文件都是相互独立的,没有建立文件与文件之间的关系,这个部分也没有被操作系统所管理,文件之间的关系只能在应用程序当中去聚合处理,这样的应用程序由于混合了文件之间关系的维护因此导致了程序的复杂。

数据库系统阶段,由于需要更高层次的数据共享,需要统一的数据管理来定义文件之间的关系,降低冗余,可以更彻底的分离程序,数据和存储之间的联系。早期的应用设计更多的是根据程序导向的架构设计,但是数据库诞生让数据层位于应用架构的底层,数据库定义好数据模型,然后应用程序在此基础上完成业务逻辑的处理,这样设计出以数据库为核心的软件架构。

数据库技术是对数据存储,加工与管理的学科,数据库是隔离了底层数据存储的抽象层,为用户提供一个稳定统一的访问层,数据库是一个相对独立的系统,数据库的特点是为了保证简单安全的数据共享,可以进行事务管理,为访问数据库的用户屏蔽掉了对于数据访问复杂的细节。

经过半个世纪的发展,数据库无论从理论还是应用都已经形成了完整的生态坏境,并已经随着各种互联网应用的普及影响着我们的生活以及其他相关技术的发展,老的数据库技术发展的如火如荼,新的数据库技术方兴未艾,最开始的计算机系统并没有保存数据的特有系统。

数据库技术解决了以下几个问题:

数据共享:数据应该是可以面向多个客户端的,可以通过统一的接口去访问数据库。

减少冗余:不同的用户不用重复的去生成数据,这样降低了存储的负担,也让一致性的维护得到了可能。

集中控制:在文件管理的时期是分散管理,数据被统一管理,定义各个数据之间的关系。

数据独立:可以分为逻辑独立性和物理独立性。

一致性保证:安全性,并发性,完整性控制。

故障恢复:可以提供一套方法进行数据恢复。保证数据的安全性。

网状模型之后出现层次模型并先后诞生出一些DBMS,这两种数据模型能够很好的解决数据库技术的两个需求:数据集中和数据共享。20世纪70年代初,IBM提出了关系数据库的理论,该理论以一种更抽象更直观的方式定义了数据模型,也解决了不同数据模型之间的关系问题,克服了层次模型和网状模型物理不够独立的缺点。

关系数据库是一种建立在一定范围内的对象与对象关系之上的一种数据库。数据的描述采用了数学上的集合概念,不同的实体采用表的关系去存储,表的列代表实体所具有的属性而行代表一个实例。实体间的关系就是表与表之间的关系,关系数据库满足了当时对数据库技术的要求,关系数据库一般会满足ACID标准,事务的持久性,隔离性,一致性,原子性。

关系数据库的优势在于解决了前面提到了六个问题,清晰易懂的概念让关系数据库得到了广泛的应用,由于对于绝大多数关系数据库的访问都是通过SQL(结构化查询语言)的方式,因此我们把关系数据库统称为SQL数据库。随着互联网的发展尤其是web2.0和大数据等技术的发展,关系数据库的某些特性成为了瓶颈,关系数据库是建立在表之间的关系之上,因此我们在对于数据库的操作中经常会涉及到多表的连接查询等等操作,但是这样对于数据库的负担是很大,在一段时间内我们可以通过一些例如分表或则是集群或者是服务器增加缓存或者是固态硬盘的方式去解决,但是业务架构需求仍然在扩张,增加硬件资源和软件优化已经很难进一步优化或则是投入产出比无法忍受。例如对于很多应用场景我们可能更需要迅速的反馈而不是为了保证数据的ACID而额外的增加很多数据库服务器的负担,这些消耗对于业务架构来说是并不是最紧迫的。

新型数据库技术NoSQL

传统的关系模型数据库延伸出大量的关系数据库产品并为传统业务的信息化提供了可靠稳定的数据管理服务,基本满足了数据的集中管理,共享,严格的一致性和还不错的可用性。技术是服务于业务的,单纯的技术的发展是有业务相关背景的,因此在新时期下,大数据以及云计算对于数据管理的要求更加苛刻,当传统的关系模型已经无法满足新业务的性能等相关要求时候,人们开始重新思考关系模型的设计原理,由此出现了很多新兴的数据库模型,NoSQL就是在这样的业务背景下诞生的。

NoSQL的概念被提及的很早,但是当时的业务并没达到当前的规模,因此没有引起足够的重视,当前各种web2.0网站层出不穷,NoSQL的价值得到了凸显。

NoSQL可以被大致的分为文档型,K-V型,图片型等等类型。但是比较普遍的特点是访问的速度非常快。例如传统的数据库首先要定义静态的数据库模式才能存入数据,而且是按照一定的格式去存储记录。如果采用MongoDB就可以采用动态的扩展字段,传统的数据库要修改字段是十分麻烦的事情,对于MongoDB可以动态的为某个文档(对应关系数据库当中记录)增加新的字段,这样大大增加了系统的健壮性和可扩展性。传统的数据库在高并发的情况下为了保证ACID必须要采用严格的事务管理去保证数据的一致性。可能会采用加锁的方式去锁表(最小粒度为锁行)。但是这样在用户量很大的情况下就会导致的性能的降低。这种影响在极端情况下甚至导致了系统的不可用。然而这种业务场景对于一致性的要求可能并不严格,例如SNS网站的评论,可能在高并发的情况下只要保证最终的一致性就可以了,作出这点牺牲换来的是性能的大幅上升。Redis就比较适合这种场景。类似的符合特定场景的NoSQL解决方案还有HBase,cassanadra等,这在后面会详细介绍。

但是NoSQL并不是就完全能够代替传统的数据库系统,不仅仅是因为各个NoSQL所支持的业务环境可能有区别外,还有重要一点那就是更多企业可能追求的是系统的可靠性,例如保持要求7 x 24小时不能够宕机的环境,当前的NoSQL还是一门比较新颖的技术,对于新技术持比较谨慎的态度,企业不是一味的追求技术的更替而关注点在技术对业务的支持力度,因此现在很多成熟的企业在观望,很难有例如甲骨文,微软,商业机器这类公司能够领导NoSQL的发展,NoSQL现在大部分都是开源的,相关的一些功能还无法完全与传统关系数据库抗衡。NoSQL缺乏相关的监控工具等等也是一方面原因。对于企业寻找相关的人才也比较传统的数据库更加困难。

但在错综复杂的业务驱使下,NoSQL扔得到了广泛的应用,本文深入讨论其中几个具有代表性的新兴数据库。

为什么要使用NoSQL

现在无论是很多互联网公司还是很多传统的公司都在进行数字化的改造,企业的应用越来越依赖良好的软件架构,随着大数据与云计算技术的应用,更多的企业将IT架构迁移到了云端。数据库会与各种终端交互,包含网站应用,或者是移动互联网或则是物联网。面对大量的对高并发高可用或者高扩展性的业务需求,企业对于数据库的要求已经让传统的关系数据库不堪重负。

大量的企业需要的数据库架构业务挑战大概包含以下几点:

(1)支持大量用户同时在线高并发访问

(2)在分布式服务架构下能够得到低延迟的访问响应

(3)系统可用性极高

(4)需要存储大量非结构化数据

(5)能够完成快递的更替,能够扩充属性。

我们需要的系统设计是更加灵活的,高度的可用性可、扩展性、可满足大量用户稳定的访问或者是更加灵活的对象存储结构。当传统的关系数据库已经无法满足这样的要求的时候,就可以考虑迁移到NoSQL数据库。

NoSQL的种类很多,与关系数据库的关系并非是对立的,而是互补的,如今的系统架构很难完全脱离关系数据库,企业迁移到NoSQL架构是遇到了关键的技术瓶颈。传统的关系数据库是基于共享的机制,如果要进行数据结构的修改,必须停机进行修改。现在的大量的互联网应用的诞生对应用的需求是多种多样的,无论是谷歌或是亚马逊这类的大公司都有自己的NoSQL的应用,这些NoSQL是对互联网时代企业级应用要求的有力补充。

传统数据库的模式是静态存放数据,这样让应用的迭代变得异常困难,因为它是很难去修改的,这不仅是增加人力和时间就能解决的问题,这样的瓶颈还严重影响到其他的业务。但是NoSQL可以克服这个问题完成迅速的迭代系统,灵活数据库存储模式给数据存储提供了很多方便。

传统的数据库在用户规模较小的情况下还是可以较好的支持业务的,甚至当用户量急剧上升期间也可以采用分表,分库甚至是添加缓存数据系统(例如memcached)来支撑业务,一般能达到这种体量的公司如果用户依旧在增长,这个时候就可以考虑采用NoSQL来缓解数据访问的压力。

传统的关系数据库最开始设计就是在单机环境下运行的,因此对分布式的支持需要很多额外的工作,虽然这么多年各大厂商对于关系数据库的运行已经非常成熟,但是如果想要弹性地扩展数据库更多的还是考虑增加单机的性能,例如购买处理器更强的服务器,为了追求极致的性能,可能预算会急剧上升,NoSQL的特点大都是比较原生地支持了分布式数据库,如果把传统数据库服务器的扩展方式比喻成纵向的扩展性能那么NoSQL支持的就是一种横向的扩展计算节点,这样更加弹性的扩充计算能力,也有利于降低成本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: