如何优化 *** 作大数据量数据库

如何优化 *** 作大数据量数据库,第1张

如何优化 *** 作大数据数据库

下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。

1.合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:

●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by *** 作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(pound index)。

●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁 *** 作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序

应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:

●索引中不包括一个或几个待排序的列;

●group by或order by子句中列的次序与索引的次序不一样;

●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取

在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。

还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序 *** 作:

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的 *** ,所以应该改为如下语句:

SELECT * FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT * FROM orders WHERE order_num=1008

这样就能利用索引路径处理查询。

4.避免相关子查询

一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

5.避免困难的正规表达式

MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”

即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。

另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3]>“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。

6.使用临时表加速查询

把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序 *** 作,而且在其他方面还能简化优化器的工作。例如:

SELECT cust.name,rcvbles.balance,……other columns

FROM cust,rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

AND cust.postcode>“98000”

ORDER BY cust.name

如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:

SELECT cust.name,rcvbles.balance,……other columns

FROM cust,rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

ORDER BY cust.name

INTO TEMP cust_with_balance

然后以下面的方式在临时表中查询:

SELECT * FROM cust_with_balance

WHERE postcode>“98000”

临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。

注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。

7.用排序来取代非顺序存取

非顺序磁盘存取是最慢的 *** 作,表现在磁盘存取臂的来回移动。SQL语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。

有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。

实例分析

下面我们举一个制造公司的例子来说明如何进行查询优化。制造公司数据库中包括3个表,模式如下所示:

1.part表

零件号?????零件描述????????其他列

(part_num)?(part_desc)??????(other column)

102,032???Seageat 30G disk?????……

500,049???Novel 10M neork card??……

……

2.vendor表

厂商号??????厂商名??????其他列

(vendor _num)?(vendor_name) (other column)

910,257?????Seageat Corp???……

523,045?????IBM Corp?????……

……

3.parven表

零件号?????厂商号?????零件数量

(part_num)?(vendor_num)?(part_amount)

102,032????910,257????3,450,000

234,423????321,001????4,000,000

……

下面的查询将在这些表上定期运行,并产生关于所有零件数量的报表:

SELECT part_desc,vendor_name,part_amount

FROM part,vendor,parven

WHERE part.part_num=parven.part_num

AND parven.vendor_num = vendor.vendor_num

ORDER BY part.part_num

如果不建立索引,上述查询代码的开销将十分巨大。为此,我们在零件号和厂商号上建立索引。索引的建立避免了在嵌套中反复扫描。关于表与索引的统计信息如下:

表?????行尺寸???行数量?????每页行数量???数据页数量

(table)?(row size)?(Row count)?(Rows/Pages)?(Data Pages)

part????150?????10,000????25???????400

Vendor???150?????1,000???? 25???????40

Parven???13????? 15,000????300?????? 50

索引?????键尺寸???每页键数量???页面数量

(Indexes)?(Key Size)?(Keys/Page)???(Leaf Pages)

part?????4??????500???????20

Vendor????4??????500???????2

Parven????8??????250???????60

看起来是个相对简单的3表连接,但是其查询开销是很大的。通过查看系统表可以看到,在part_num上和vendor_num上有簇索引,因此索引是按照物理顺序存放的。parven表没有特定的存放次序。这些表的大小说明从缓冲页中非顺序存取的成功率很小。此语句的优化查询规划是:首先从part中顺序读取400页,然后再对parven表非顺序存取1万次,每次2页(一个索引页、一个数据页),总计2万个磁盘页,最后对vendor表非顺序存取1.5万次,合3万个磁盘页。可以看出在这个索引好的连接上花费的磁盘存取为5.04万次。

hibernate如何优化大数据量 *** 作?

建议你直接用Jdbc好了,用batch,这样是最快的。

如何实现大数据量数据库的历史数据归档

打开数据库

con.Open()

读取数据

OdbcDataReader reader = cmd.ExecuteReader()

把数据加载到临时表

dt.Load(reader)

在使用完毕之后,一定要关闭,要不然会出问题

reader.Close()

这个问题是这样的:

首先你要明确你的插入是正常业务需求么?如果是,那么只能接受这样的数据插入量。

其次你说数据库存不下了 那么你可以让你的数据库上限变大 这个你可以在数据库里面设置的 里面有个数据库文件属性 maxsize

最后有个方法可以使用,如果你的历史数据不会对目前业务造成很大影响 可以考虑归档处理 定时将不用的数据移入历史表 或者另外一个数据库。

注意平时对数据库的维护 定期整理索引碎片

时间维度分区表,然后定情按照规则将属于历史的分区数据迁移到,历史库上,写个存储自动维护分区表。

如何用java jdbc 向数据库表插入大数据量

一次性插入大量数据,只能使用循环,

如:游标,while 循环语句

下面介绍While 循环插入数据,

SQL 代码如下:

IF OBJECT_ID('dbo.Nums') IS NOT NULL

DROP TABLE dbo.Nums

GO

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY)

DECLARE @max AS INT, @rc AS INT

SET @max = 5000000

SET @rc = 1

INSERT INTO Nums VALUES(1)

WHILE @rc * 2 <= @max

BEGIN

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums

SET @rc = @rc * 2

END

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max

--以上函数取自Inside SQL Server 2005: T-SQL Query一书。

INSERT dbo.Sample SELECT n, RAND(CAST(NEWID() AS BINARY(16))) FROM Nums

php 怎么解决 大数据量 插入数据库

ini_set('max_execution_time','0')

$pdo = new PDO("mysql:host=localhostdbname=test","root","123456")

$sql = "insert into test(name,age,state,created_time) values"

for($i=0$i<100000$i++){

$sql .="('zhangsan',21,1,'2015-09-17')"

}

$sql = substr($sql,0,strlen($sql)-1)

var_dump($sql)

if($pdo ->exec($sql)){

echo "插入成功!"

echo $pdo ->lastinsertid()

}

试试吧。10万条1分钟多,我觉得还行

请教如何通过WCF传输大数据量数据

就是直接把DataSet 类型作为参数直接传递给服务端

WCF默认支持这么做,直接传Datatable不行。

你看一下 “服务引用设置”中你选的 *** 类型是什么,我选的是System.Array

字典 *** 类型是默认第一项 System.Collections.Generic.Dictionary

又是一个把自己架在火上烤的需求啊,

如果不考虑传输因素,可以调整wcf配置,提升传递的容量,如果是对象传递可能还要调整对象层次的深度

使用计算机后,随着数据处理量的增长,产生了数据管理技术。数据管理技术的发展与计算机硬件(主要是外部存储器)系统软件及计算机应用的范围有着密切的联系。数据管理技术的发展经历了以下四个阶段:人工管理阶段、文件系统阶段、数据库阶段和高级数据库技术阶段。

数据管理的诞生

数据库的历史可以追溯到五十年前,那时的数据管理非常简单。通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片。而数据管理就是对所有这些穿孔卡片进行物理的储存和处理。然而,1950 年雷明顿兰德公司(Remington Rand Inc)的一种叫做Univac I 的计算机推出了一种一秒钟可以输入数百条记录的磁带驱动器,从而引发了数据管理的革命。1956 年IBM生产出第一个磁盘驱动器—— the Model 305 RAMAC。此驱动器有50 个盘片,每个盘片直径是2 英尺,可以储存5MB的数据。使用磁盘最大的好处是可以随机存取数据,而穿孔卡片和磁带只能顺序存取数据。

1951: Univac系统使用磁带和穿孔卡片作为数据存储。

数据库系统的萌芽出现于二十世纪60 年代。当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。传统的文件系统已经不能满足人们的需要,能够统一管理和共享数据的数据库管理系统(DBMS)应运而生。数据模型是数据库系统的核心和基础,各种DBMS软件都是基于某种数据模型的。所以通常也按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。

最早出现的网状DBMS,是美国通用电气公司Bachman等人在1961年开发的IDS(Integrated Data Store)。1964年通用电气公司(General ElectricCo.)的Charles Bachman 成功地开发出世界上第一个网状DBMS也即第一个数据库管理系统——集成数据存储(Integrated Data Store IDS),奠定了网状数据库的基础,并在当时得到了广泛的发行和应用。IDS 具有数据模式和日志的特征,但它只能在GE主机上运行,并且数据库只有一个文件,数据库所有的表必须通过手工编码生成。之后,通用电气公司一个客户——BF Goodrich Chemical 公司最终不得不重写了整个系统,并将重写后的系统命名为集成数据管理系统(IDMS)。

网状数据库模型对于层次和非层次结构的事物都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍。在数据库发展史上,网状数据库占有重要地位。

层次型DBMS是紧随网络型数据库而出现的,最著名最典型的层次数据库系统是IBM 公司在1968 年开发的IMS(Information Management System),一种适合其主机的层次数据库。这是IBM公司研制的最早的大型数据库系统程序产品。从60年代末产生起,如今已经发展到IMSV6,提供群集、N路数据共享、消息队列共享等先进特性的支持。这个具有30年历史的数据库产品在如今的WWW应用连接、商务智能应用中扮演着新的角色。

1973年Cullinane公司(也就是后来的Cullinet软件公司),开始出售Goodrich公司的IDMS改进版本,并且逐渐成为当时世界上最大的软件公司。 网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而后来出现的关系数据库较好地解决了这些问题。

1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础。尽管之前在1968年Childs已经提出了面向集合的模型,然而这篇论文被普遍认为是数据库系统历史上具有划时代意义的里程碑。Codd的心愿是为数据库建立一个优美的数据模型。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。但是当时也有人认为关系模型是理想化的数据模型,用来实现DBMS是不现实的,尤其担心关系数据库的性能难以接受,更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。为了促进对问题的理解,1974年ACM牵头组织了一次研讨会,会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。这次著名的辩论推动了关系数据库的发展,使其最终成为现代数据库产品的主流。

1969年Edgar F.“Ted” Codd发明了关系数据库。

1970年关系模型建立之后,IBM公司在San Jose实验室增加了更多的研究人员研究这个项目,这个项目就是著名的System R。其目标是论证一个全功能关系DBMS的可行性。该项目结束于1979年,完成了第一个实现SQL的 DBMS。然而IBM对IMS的承诺阻止了System R的投产,一直到1980年System R才作为一个产品正式推向市场。IBM产品化步伐缓慢的三个原因:IBM重视信誉,重视质量,尽量减少故障;IBM是个大公司,官僚体系庞大,IBM内部已经有层次数据库产品,相关人员不积极,甚至反对。

然而同时,1973年加州大学伯克利分校的Michael Stonebraker和Eugene Wong利用System R已发布的信息开始开发自己的关系数据库系统Ingres。他们开发的Ingres项目最后由Oracle公司、Ingres公司以及硅谷的其他厂商所商品化。后来,System R和Ingres系统双双获得ACM的1988年“软件系统奖”。

1976年霍尼韦尔公司(Honeywell)开发了第一个商用关系数据库系统——Multics Relational Data Store。关系型数据库系统以关系代数为坚实的理论基础,经过几十年的发展和实际应用,技术越来越成熟和完善。其代表产品有Oracle、IBM公司的 DB2、微软公司的MS SQL Server以及Informix、ADABAS D等等。 1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。SQL语言的功能包括查询、 *** 纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。SQL集成实现了数据库生命周期中的全部 *** 作。SQL提供了与关系数据库进行交互的方法,它可以与标准的编程语言一起工作。自产生之日起,SQL语言便成了检验关系数据库的试金石,而SQL语言标准的每一次变更都指导着关系数据库产品的发展方向。然而,直到二十世纪七十年代中期,关系理论才通过SQL在商业数据库Oracle和DB2中使用。

1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。SQL标准有3个版本。基本SQL定义是ANSⅨ3135-89,“Database Language - SQL with Integrity Enhancement”[ANS89],一般叫做SQL-89。SQL-89定义了模式定义、数据 *** 作和事务处理。SQL- 89和随后的ANSⅨ3168-1989,“Database Language-Embedded SQL”构成了第一代SQL标准。ANSⅨ3135-1992[ANS92]描述了一种增强功能的SQL,叫做SQL-92标准。SQL-92包括模式 *** 作,动态创建和SQL语句动态执行、网络环境支持等增强特性。在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。

1976年IBM E.F.Codd发表了一篇里程碑的论文“R系统:数据库关系理论”,介绍了关系数据库理论和查询语言SQL。Oracle的创始人Ellison非常仔细地阅读了这篇文章,被其内容震惊,这是第一次有人用全面一致的方案管理数据信息。作者E.F.Codd 1966年就发表了关系数据库理论,并在IBM研究机构开发原型,这个项目就是R系统,存取数据表的语言就是SQL。Ellison看完后,敏锐意识到在这个研究基础上可以开发商用软件系统。而当时大多数人认为关系数据库不会有商业价值。Ellison认为这是他们的机会:他们决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央情报局做过的项目名。几个月后,他们就开发了Oracle 1.0。但这只不过是个玩具,除了完成简单关系查询不能做任何事情,他们花相当长的时间才使Oracle变得可用,维持公司运转主要靠承接一些数据库管理项目和做顾问咨询工作。而IBM却没有计划开发,为什么蓝色巨人放弃了这个价值上百亿的产品,原因有很多:IBM的研究人员大多是学术出身,他们最感兴趣的是理论,而非推向市场的产品,从学术上看,研究成果应公开发表论文和演讲能使他们成名,为什么不呢?还有一个很主要的原因就是IBM当时有一个销售得还不错的层次数据库产品IMS。直到1985年IBM才发布了关系数据库DB2 ,Ellision那时已经成了千万富翁。Ellison曾将IBM 选择Microsoft 的MS-DOS作为IBM-PC机的 *** 作系统比为:“世界企业经营历史上最严重的错误,价值超过了上千亿美元。”IBM发表R系统论文,而且没有很快推出关系数据库产品的错误可能仅仅次之。Oracle的市值在1996年就达到了280亿美元。 随着信息技术和市场的发展,人们发现关系型数据库系统虽然技术很成熟,但其局限性也是显而易见的:它能很好地处理所谓的“表格型数据”,却对技术界出现的越来越多的复杂类型的数据无能为力。九十年代以后,技术界一直在研究和寻求新型数据库系统。但在什么是新型数据库系统的发展方向的问题上,产业界一度是相当困惑的。受当时技术风潮的影响,在相当一段时间内,人们把大量的精力花在研究“面向对象的数据库系统(object oriented database)”或简称“OO数据库系统”。值得一提的是,美国Stonebraker教授提出的面向对象的关系型数据库理论曾一度受到产业界的青睐。而Stonebraker本人也在当时被Informix花大价钱聘为技术总负责人。

然而,数年的发展表明,面向对象的关系型数据库系统产品的市场发展的情况并不理想。理论上的完美性并没有带来市场的热烈反应。其不成功的主要原因在于,这种数据库产品的主要设计思想是企图用新型数据库系统来取代现有的数据库系统。这对许多已经运用数据库系统多年并积累了大量工作数据的客户,尤其是大客户来说,是无法承受新旧数据间的转换而带来的巨大工作量及巨额开支的。另外,面向对象的关系型数据库系统使查询语言变得极其复杂,从而使得无论是数据库的开发商家还是应用客户都视其复杂的应用技术为畏途。 二十世纪六十年代后期出现了一种新型数据库软件:决策支持系统(DSS),其目的是让管理者在决策过程中更有效地利用数据信息。于是在1970年,第一个联机分析处理工具——Express诞生了。其他决策支持系统紧随其后,许多是由公司的IT部门开发出来的。

1985年,第一个商务智能系统(business intelligence)由Metaphor计算机系统有限公司为Procter &Gamble公司开发出来,主要是用来连接销售信息和零售的扫描仪数据。同年, Pilot软件公司开始出售第一个商用客户/服务器执行信息系统——Command Center。同样在这年,加州大学伯克利分校Ingres项目演变成Postgres,其目标是开发出一个面向对象的数据库。此后一年, Graphael公司开发了第一个商用的对象数据库系统—Gbase。

1988年,IBM公司的研究者Barry Devlin和Paul Murphy发明了一个新的术语—信息仓库,之后,IT的厂商开始构建实验性的数据仓库。1991年,W.H. Bill Inmon出版了一本“如何构建数据仓库”的书,使得数据仓库真正开始应用。

1991: W.H.“Bill” Inmon发表了”构建数据仓库”

二十世纪九十年代,随着基于PC的客户/服务器计算模式和企业软件包的广泛采用,数据管理的变革基本完成。数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。Internet的异军突起以及XML语言的出现,给数据库系统的发展开辟了一片新的天地。

电子商务最早产生于20世纪60年代,大规模发展于20世纪90年代,其产生和发展的重要条件主要有以下几个方面。

1.经济全球化的发展

经济全球化是指世界各国的经济在生产、分配、消费各个领域发生的一体化趋势。经济全球化促进了跨国公司的发展,使国际范围内的商务活动变得频繁,而且使国际贸易成为了各国经济发展的重要组成部分。经济全球化促使人们寻找合适的方式来满足这种商务活动,电子商务由此应运而生,并以其独特的优势成为这场革命中的重要力量,在国际商务活动中扮演着越来越重要的角色。

2.计算机和网络技术的发展、普及和广泛应用近30年来,计算机的运行速度越来越快,处理能力越来越强,价格越来越低,应用越来越广泛,这为电子商务的应用提供了基础。由于国际互联网逐渐成为全球通信与交易的媒体,全球上网用户呈级数增长趋势,快捷、安全、低成本的特点为电子商务的发展提供了应用条件。

3.xyk和电子金融的普及应用

xyk以其方便、快捷、安全等优点而成为人们消费支付的重要手段,并由此形成了完善的全球性xyk计算机网络支付与结算系统,使“一卡在手,走遍全球”成为可能,同时也成为电子商务中网上支付的重要手段。各大银行也都看到了电子商务的发展前景,纷纷推出了支持在线交易的电子金融服务,在安全技术的保障下,电子银行的发展解决了商务活动中的支付问题,成为促进电子商务发展的强大动力。

4.电子安全交易协议的制定和安全技术的发展

1997年5月31日,由美国VISA和Mastercard国际组织等联合指定的电子安全交易协议(Secure Electronic Transfer

Protocol,SET)出台,该协议得到了大多数厂商的认可和支持,为在网络上进行电子商务活动提供了一个关键的安全环境。计算机和网络安全技术的发展为电子商务的开展提供了技术和安全保障,这些技术包括HTML、XML、数据库技术、动态网页技术、SSL协议、SET协议、加密技术、防火墙技术和数字签名技术等。

5.政府的支持与推动

自1997年欧盟发布了欧洲电子商务协议,美国随后发布《全球电子商务纲要》以后,电子商务受到了世界各国政府的重视,许多国家的政府开始尝试“网上采购”,这为电子商务的发展提供了有力的支持。同时,各国政府都非常重视电子商务的发展,为电子商务的发展提供良好的生存环境,同时为电子商务制定法律规范和技术标准,这就保障了电子商务的合法进行和长远发展

数据库技术从诞生到现在,在不到

半个世纪的时间里,形成了坚实的理论

基础、成熟的商业产品和广泛的应用领

域,吸引越来越多的研究者加入。数据库

的诞生和发展给计算机信息管理带来了

一场巨大的革命。三十多年来,国内外已

经开发建设了成千上万个数据库,它已

成为企业、部门乃至个人日常工作、生产

和生活的基础设施。同时,随着应用的扩

展与深入,数据库的数量和规模越来越

大,数据库的研究领域也已经大大地拓

广和深化了。30年间数据库领域获得了

三次计算机图灵奖(C.W. Bachman,

E.F.Codd, J.Gray),更加充分地说明

了数据库是一个充满活力和创新精神的

领域。就让我们沿着历史的轨迹,追溯一

下数据库的发展历程。

数据库发展简史

1. 数据管理的诞生

数据库的历史可以追溯到五十年前,

那时的数据管理非常简单。通过大量的

分类、比较和表格绘制的机器运行数百

万穿孔卡片来进行数据的处理,其运行

结果在纸上打印出来或者制成新的穿孔

卡片。而数据管理就是对所有这些穿孔

卡片进行物理的储存和处理。

然而,1 9 5 1 年雷明顿兰德公司

(Remington Rand Inc.)的一种叫做

Univac I 的计算机推出了一种一秒钟可

以输入数百条记录的磁带驱动器,从而

引发了数据管理的革命。1956 年IBM生

产出第一个磁盘驱动器—— the Model

305 RAMAC。此驱动器有50 个盘片,

每个盘片直径是2 英尺,可以储存5MB

的数据。使用磁盘最大的好处是可以随

机地存取数据,而穿孔卡片和磁带只能

顺序存取数据。

数据库系统的萌芽出现于60 年代。

当时计算机开始广泛地应用于数据管理,

对数据的共享提出了越来越高的要求。

传统的文件系统已经不能满足人们的需

要。能够统一管理和共享数据的数据库

管理系统(DBMS)应运而生。数据模型

是数据库系统的核心和基础,各种

DBMS 软件都是基于某种数据模型的。

所以通常也按照数据模型的特点将传统

数据库系统分成网状数据库、层次数据

库和关系数据库三类。

最早出现的是网状DBMS,是美国

通用电气公司Bachman等人在1961年开

发成功的IDS(Integrated DataStore)。

1961年通用电气公司(General Electric

Co.)的Charles Bachman 成功地开发

出世界上第一个网状DBMS也是第一个

数据库管理系统—— 集成数据存储

(Integrated DataStore IDS),奠定了网

状数据库的基础,并在当时得到了广泛

的发行和应用。IDS 具有数据模式和日

志的特征。但它只能在GE主机上运行,

并且数据库只有一个文件,数据库所有

的表必须通过手工编码来生成。

之后,通用电气公司一个客户——

BF Goodrich Chemical 公司最终不得

不重写了整个系统。并将重写后的系统

命名为集成数据管理系统(IDMS)。

网状数据库模型对于层次和非层次

结构的事物都能比较自然的模拟,在关

系数据库出现之前网状DBMS要比层次

DBMS用得普遍。在数据库发展史上,网

状数据库占有重要地位。

层次型DBMS是紧随网络型数据库

而出现的。最著名最典型的层次数据库

系统是IBM 公司在1968 年开发的IMS

(Information Management System),一

种适合其主机的层次数据库。这是IBM

公司研制的最早的大型数据库系统程序

产品。从60 年代末产生起,如今已经发

展到IMSV6,提供群集、N路数据共享、

消息队列共享等先进特性的支持。这个

具有3 0 年历史的数据库产品在如今的

WWW应用连接、商务智能应用中扮演

着新的角色。

1973 年Cullinane 公司(也就是后

来的C u l l i n e t 软件公司),开始出售

Goodrich 公司的IDMS 改进版本,并且

逐渐成为当时世界上最大的软件公司。

2. 关系数据库的由来

网状数据库和层次数据库已经很好

1951:Univac I 系统使用磁带

和穿孔卡片作为数据存储

管理·开发故事

数据库发展史

程序员2004.06 47

地解决了数据的集中和共享问题,但是

在数据独立性和抽象级别上仍有很大欠

缺。用户在对这两种数据库进行存取时,

仍然需要明确数据的存储结构,指出存

取路径。而后来出现的关系数据库较好

地解决了这些问题。

1970 年,IBM 的研究员E.F.Codd

博士在刊物Communication of the ACM

上发表了一篇名为“A Relational Model

of Data for Large Shared Data Banks”

的论文,提出了关系模型的概念,奠定了

关系模型的理论基础。尽管之前在1968

年Childs 已经提出了面向集合的模型,

然而这篇论文被普遍认为是数据库系统

历史上具有划时代意义的里程碑。Codd

的心愿是为数据库建立一个优美的数据

模型。后来Codd又陆续发表多篇文章,

论述了范式理论和衡量关系系统的12条

标准,用数学理论奠定了关系数据库的

基础。关系模型有严格的数学基础,抽象

级别比较高,而且简单清晰,便于理解和

使用。但是当时也有人认为关系模型是

理想化的数据模型,用来实现DBMS是

不现实的,尤其担心关系数据库的性能

难以接受,更有人视其为当时正在进行

中的网状数据库规范化工作的严重威胁。

为了促进对问题的理解,1974年ACM牵

头组织了一次研讨会,会上开展了一场

分别以Codd 和Bachman为首的支持和

反对关系数据库两派之间的辩论。这次

著名的辩论推动了关系数据库的发展,

使其最终成为现代数据库产品的主流。

1970 年关系模型建立之后,IBM公

司在San Jose实验室增加了更多的研究

人员研究这个项目,这个项目就是著名

的System R。目标是论证一个全功能关

系DBMS的可行性。该项目结束于1979

年,完成了第一个实现SQL的DBMS。然

而IBM 对IMS 的承诺阻止了System R

的投产,一直到1980 年System R 才作

为一个产品正式推向市场。IBM 产品化

步伐缓慢的三个原因:IBM重视信誉、重

视质量、尽量减少故障;IBM 的官僚体

系庞大;IBM 内部已经有层次数据库产

品,相关人员不积极,甚至反对。

然而同时,1973年加州大学伯克利

分校的Michael Stonebraker 和Eugene

Wong利用System R已发布的信息开始

开发自己的关系数据库系统Ingres。他

们开发的Ingres项目最后由Oracle公司、

Ingres 公司以及硅谷的其他厂商所商品

化。后来,System R和Ingres 系统双双

获得ACM的1988 年“软件系统奖”。

1976 年霍尼韦尔公司(Honeywell)

开发了第一个商用关系数据库系统——

Multics Relational Dat a Store。关系型数

据库系统以关系代数为坚实的理论基础,

经过几十年的发展和实际应用,技术越

来越成熟和完善。其代表产品有Oracle、

IBM 公司的DB2、微软公司的MS SQL

Server 以及Informix、ADABASD 等等。

3. 结构化查询语言 (SQL)

1974 年,IBM 的Ray Boyce 和Don

Chamberlin 将Codd关系数据库的12条

准则的数学定义以简单的关键字语法表

现出来,里程碑式地提出了S Q L

(Structured Query Language)语言。

SQL语言的功能包括查询、 *** 纵、定义和

控制,是一个综合的、通用的关系数据库

语言,同时又是一种高度非过程化的语

言,只要求用户指出做什么而不需要指

出怎么做。SQL集成实现了数据库生命周

期中的全部 *** 作。SQL提供了与关系数据

库进行交互的方法,它可以与标准的编

程语言一起工作。自产生之日起,SQL语

言便成了检验关系数据库的试金石,而

SQL语言标准的每一次变更都指导着关系

数据库产品的发展方向。然而,直到二十

世纪七十年代中期,关系理论才通过SQL

在商业数据库Oracle和DB2中使用。

1986年,ANSI把SQL作为关系数据

库语言的美国标准,同年公布了标准

1969:Edgar F. Codd

发明了关系数据库

数据库发展史

1976年IBM E.F.Codd发表了一篇里

程碑的论文“R系统:数据库关系理论”,

介绍了关系数据库理论和查询语言SQL。

Oracle的创始人Ellison非常仔细地阅读了

这篇文章,被其内容震惊,这是第一次有

人用全面一致的方案管理数据信息。作

者E.F.Codd十年前就发表了关系数据库

理论,并在IBM 研究机构开发原型,这

个项目就是R系统,存取数据表的语言

就是SQL。Ellison看完后,敏锐意识到在

这个研究基础上可以开发商用软件系统。

而当时大多数人认为关系数据库不

会有商业价值。Ellison认为这是他们的

机会:他们决定开发通用商用数据库系统

Oracle,这个名字来源于他们曾给中央情

报局做过的项目名。几个月后,他们就开

发了Oracle 1.0 。但这只不过是个玩具,

除了完成简单关系查询不能做任何事情,

他们花相当长的时间才使Oracle变得可

用,维持公司运转主要靠承接一些数据

库管理项目和做顾问咨询工作。

而IBM却没有计划开发,为什么蓝

色巨人放弃了这个价值上百亿的产品,

原因有很多:IBM的研究人员大多是学

术出身,他们最感兴趣的是理论,而非

推向市场的产品,从学术上看,研究成

果应公开,发表论文和演讲能使他们

成名,为什么不呢?还有一个很主要

的原因就是IBM 当时有一个销售得还

不错的层次数据库产品IMS。直到1985

年I B M 才发布了关系数据库D B 2 ,

Ellision那时已经成了千万富翁。

Ellison曾将IBM 选择Microsoft 的

MS-DOS作为IBM-PC机的 *** 作系统比

为:“世界企业经营历史上最严重的错

误,价值超过了上千亿美元。”IBM 发

表R系统论文,而且没有很快推出关系

数据库产品的错误可能仅仅次之。

Oracle 的市值在1996年就达到了280亿

美元。

Oracle 的由来

48 程序员2004.06

SQL文本。目前SQL标准有3个版本。基

本SQL定义是ANSIX3135-89,“Database

Lan guage —— SQ L w it h I nt e gri t y

Enhancement”[ANS89],一般叫做SQL-

89。SQL-89 定义了模式定义、数据 *** 作

和事务处理。S Q L - 8 9 和随后的

ANSIX3168-1989,“Database Language—

—Embedded SQL”构成了第一代SQL标

准。ANSIX3135-1992[ANS92]描述了一

种增强功能的SQL,现在叫做SQL-92标

准。SQL-92 包括模式 *** 作,动态创建和

SQL语句动态执行、网络环境支持等增

强特性。在完成SQL-92标准后,ANSI和

ISO即开始合作开发SQL3标准。SQL3的

主要特点在于抽象数据类型的支持,为

新一代对象关系数据库提供了标准。

4. 面向对象数据库

随着信息技术和市场的发展,人们

发现关系型数据库系统虽然技术很成熟,

但其局限性也是显而易见的:它能很好

地处理所谓的“表格型数据”,却对越来

越多复杂类型的数据无能为力。九十年

代以后,技术界一直在研究和寻求新型

数据库系统。但什么是新型数据库系统

的发展方向,产业界一度相当困惑。受当

时技术风潮的影响,在相当一段时间内,

人们把大量的精力花在研究“面向对象

的数据库系统(O b j e c t - O r i e n t e d

Database)”或简称“OO数据库系统”。

值得一提的是,美国Stonebraker教授提

出的面向对象的关系型数据库理论曾一

度受到产业界的青睐。而Stonebraker本

人也在当时被Informix花大价钱聘为技

术总负责人。

然而,数年的发展表明,面向对象的

关系型数据库系统产品的市场发展情况

并不理想。理论上的完美性并没有带来

市场的热烈反应。不成功的主要原因在

于,这种数据库产品的主要设计思想是

企图用新型数据库系统来取代现有的数

据库系统。这对许多已经运用数据库系

统并积累了大量工作数据的客户,尤其

是大客户来说,无法承受新旧数据间的

转换而带来的巨大工作量及巨额开支。

另外, 面向对象的关系型数据库系统使

查询语言变得极其复杂,从而使得无论

是数据库的开发商家还是应用客户都视

其复杂的应用技术为畏途。

5. 数据管理的变革

二十世纪六十年代后期出现了一种

新型数据库软件:决定支持系统(DSS),

其目的是让管理者在决策过程中更有效

地利用数据信息。于是在1970 年,第一

个联机分析处理工具—— Express 诞生

了。其他决策支持系统紧随其后,许多是

由公司的IT 部门开发出来的。

1 9 8 5 年,第一个商务智能系统

(business intelligence)由Metaphor计

算机系统有限公司为Procter &Gamble

公司开发出来,主要用来连接销售信息

和零售的扫描仪数据。同年, Pilot软件

公司开始出售第一个商用客户/ 服务器

执行信息系统—— Command Center。

同样在这年,加州大学伯克利分校

Ingres 项目演变成Postgres,其目标是开

发出一个面向对象的数据库。此后一年,

Graphael公司开发了第一个商用的对象

数据库系统—— Gbase。

1988 年,IBM 公司的研究者Barry

Devlin和Paul Murphy发明了一个新的

术语——信息仓库,之后,IT厂商开始

构建实验性的数据仓库。1991年,W.H.

Inmon出版了一本《如何构建数据仓库》

的书,使得数据仓库真正开始应用,因此

Inmon 也被尊称为“数据仓库之父”。

二十世纪九十年代,随着客户/ 服

务器计算模式和企业软件包的广泛采用,

数据管理的变革基本完成。数据管理不

再仅仅是存储和管理数据,而转变成用

户需要的各种数据管理的方式。Internet

的异军突起以及XML语言的出现,给数

据库系统的发展开辟了一片新天地。

数据库未来发展趋势

随着信息管理内容的不断扩展,出

现了丰富多样的数据模型(层次模型,网

状模型,关系模型,面向对象模型,半结

构化模型等),新技术也层出不穷(数据

流,Web数据管理,数据挖掘等)。

目前每隔几年,国际上一些资深的

数据库专家就会聚集一堂,探讨数据库

研究现状,存在的问题和未来需要关注

的新技术焦点。过去已有的几个类似报

告包括:1989 年Future Directions in

DBMS Research-The Laguna Beach

Participants ,1990 年Database

S y s t e m s : A c h i e v e m e n t s a n d

Opportunities ,1995 年的Database

1991:W.H. Inmon 发

表了《构建数据仓库》

数据库发展大事记

1951:Univac系统使用磁带和穿孔卡

片作为数据存储。

1956:IBM公司在其Model 305 RAMAC

中第一次引入了磁盘驱动器

1961:通用电气(GE)公司的Charles

Bachman开发了第一个数据库

管理系统—— IDS

1969:E.F. Codd发明了关系数据库。

1973:John J.Cullinane领导Cullinane公

司开发了 IDMS ——一个针对

IBM 主机的基于网络模型的数

据库。

1976:Honeywell 公司推出了Multics

Relational Data Store ——第一

个商用关系数据库产品。

1979:Oracle公司引入了第一个商用

SQL 关系数据库管理系统。

1983:IBM 推出了DB2 数据库产品。

1985:为Procter &Gamble 系统设计

的第一个商务智能系统产生。

1991:W.H.Inmon发表了《构建数据

仓库》。

管理·开发故事

程序员2004.06 49

ResearchAchievements and Opportunities

into the 21st Century,1996

年Strategic Directions in Database

Systems-Breaking Out of the Box 和

1998 年的The Asilomar Report on

Database Research。2003 年的聚会于5

月初在Lowell Mass举行,共25位资深

数据库学者参加,集中讨论了信息存储、

组织、管理和访问等问题。

信息的本质和来源在不断变化,

Internet、Web、自然科学、电子商务是

信息和信息处理的巨大源泉。而廉价的

微型传感器技术使得大部分物体可以实

时汇报他们的位置和状态。这类信息能

支持对移动对象的状态和位置的监视应

用。传感信息的处理将会引发许多新环

境下极有趣味的数据库问题。

而在应用领域,Internet是目前主要

的驱动力,特别是在支持“跨企业”的应

用上。历史上,应用都是企业内部的,可

以在一个行政领域内进行完善的指定和

优化。但现在,大部分企业感兴趣的是如

何与供应商、客户进行更密切的交流以

便共享信息,以便提供更好的客户支持。

这类应用需要安全和信息集成的有力工

具。由此产生了数据库相关的新问题。

另一个重要应用领域是自然科学,

特别是物理科学、生物科学、保健科学和

工程领域。这些领域产生了大量复杂的

数据集,需要比现有的数据库产品更高

级的数据库支持。这些领域同样也需要

信息集成机制的支持。除此之外,还需要

对数据分析器产生的数据管道的管理,

需要对有序数据的存储和查询(如:时间

序列、图像分析、网格计算和地理信息),

需要世界范围内数据网格的集成。

除了在信息管理领域的这些挑战外,

在传统的DBMS 上,诸如数据模型、访

问方法、查询处理代数、并发控制、恢复、

查询语言和DBMS的用户界面等也面临

着巨大的变化。这些问题过去已经得到

充分的研究,但是技术的发展不断改变

其应用规则。比如说,磁盘和RAM容量

的不断变大,存储每个比特数据的花费

不断降低。虽然访问次数和带宽也在不

断提高,但是他们不像前者发展得那样

快,不断变化的比率要求重新评估存储

管理和查询处理代数。除此之外,处理器

高速缓存的规模和层次的提高,要求

DBMS 算法能够适应cache大小的变化。

上述只是由于技术改变而对原有算法重

新评价的两个例子。

另一个推动数据库研究发展的动力

是相关技术的成熟。如过去几十年里,数

据挖掘技术已成为数据库系统重要的组

成部分。Web搜索引擎导致了信息检索

的商品化,并和传统的数据库查询技术

集成。许多人工智能领域的研究成果也

和数据库技术融合起来,这些新组件使

得我们处理语音、自然语言、进行不确定

性推理和机器学习等。整体上,这些都要

求一个与我们现在完全不同的信息管理

架构,并重新考虑信息存储、组织、管理

和访问等方面的问题。

近40年中,数据库研究工作集中在

数据库管理系统开发的核心领域上,而

数据管理的研究范畴远比这宽的多。如

果忽视一些新的应用领域面临的数据管

理问题,就会使数据库研究局限于传统

的数据管理应用上而失去活力。

在众多新技术应用中,对数据库研

究最具影响力,推动数据库研究进入新

纪元的无疑将是I n t e r n e t 的发展。

Internet从深度和广度两方面对数据库技

术提出了挑战。从深度上讲,Internet环

境中,一些数据管理的基本假设不再成

立,需要重新考虑在新情况下对传统数

据库技术的改进。从广度上讲,新问题的

出现需要开拓思路,寻求创新性的技术

突破。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6832400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存