面向程序员的数据库访问性能优化法则

2024-08-16

面向程序员的数据库访问性能优化法则(通用7篇)

篇1:面向程序员的数据库访问性能优化法则

2.1、数据分页处理

一般数据分页方式有:

2.1.1、客户端(应用程序或浏览器)分页

将数据从应用服务器全部下载到本地应用程序或浏览器,在应用程序或浏览器内部通过本地代码进行分页处理

优点:编码简单,减少客户端与应用服务器网络交互次数

缺点:首次交互时间长,占用客户端内存

适应场景:客户端与应用服务器网络延时较大,但要求后续操作流畅,如手机GPRS,超远程访问(跨国)等等。

2.1.2、应用服务器分页

将数据从数据库服务器全部下载到应用服务器,在应用服务器内部再进行数据筛选。以下是一个应用服务器端Java程序分页的示例:

List list=executeQuery(“select * from employee order by id”);

Int count= list.size;

List subList= list.subList(10, 20);

优点:编码简单,只需要一次SQL交互,总数据与分页数据差不多时性能较好。

缺点:总数据量较多时性能较差。

适应场景:数据库系统不支持分页处理,数据量较小并且可控。

2.1.3、数据库SQL分页

采用数据库SQL分页需要两次SQL完成

一个SQL计算总数量

一个SQL返回分页后的数据

优点:性能好

缺点:编码复杂,各种数据库语法不同,需要两次SQL交互。

oracle数据库一般采用rownum来进行分页,常用分页语法有如下两种:

直接通过rownum分页:

select * from (

select a.*,rownum rn from

(select * from product a where company_id=? order by status) a

where rownum<=20)

where rn>10;

数据访问开销=索引IO+索引全部记录结果对应的表数据IO

采用rowid分页语法

优化原理是通过纯索引找出分页记录的ROWID,再通过ROWID回表返回数据,要求内层查询和排序字段全在索引里。

create index myindex on product(company_id,status);

select b.* from (

select * from (

select a.*,rownum rn from

(select rowid rid,status from product a where company_id=? order by status) a

where rownum<=20)

where rn>10) a, product b

where a.rid=b.rowid;

数据访问开销=索引IO+索引分页结果对应的表数据IO

实例:

一个公司产品有1000条记录,要分页取其中20个产品,假设访问公司索引需要50个IO,2条记录需要1个表数据IO。

那么按第一种ROWNUM分页写法,需要550(50+1000/2)个IO,按第二种ROWID分页写法,只需要60个IO(50+20/2);

2.2、只返回需要的字段

通过去除不必要的返回字段可以提高性能,例:

调整前:select * from product where company_id=?;

调整后:select id,name from product where company_id=?;

优点:

1、减少数据在网络上传输开销

2、减少服务器数据处理开销

3、减少客户端内存占用

4、字段变更时提前发现问题,减少程序BUG

5、如果访问的所有字段刚好在一个索引里面,则可以使用纯索引访问提高性能。

缺点:增加编码工作量

由于会增加一些编码工作量,所以一般需求通过开发规范来要求程序员这么做,否则等项目上线后再整改工作量更大。

如 果你的查询表中有大字段或内容较多的字段,如备注信息、文件内容等等,那在查询表时一定要注意这方面的问题,否则可能会带来严重的性能问题。如果表经常要 查询并且请求大内容字段的概率很低,我们可以采用分表处理,将一个大表分拆成两个一对一的关系表,将不常用的大内容字段放在一张单独的表中。如一张存储上 传文件的表:

T_FILE(ID,FILE_NAME,FILE_SIZE,FILE_TYPE,FILE_CONTENT)

我们可以分拆成两张一对一的关系表:

T_FILE(ID,FILE_NAME,FILE_SIZE,FILE_TYPE)

T_FILECONTENT(ID, FILE_CONTENT)

通过这种分拆,可以大大提少T_FILE表的单条记录及总大小,这样在查询T_FILE时性能会更好,当需要查询FILE_CONTENT字段内容时再访问T_FILECONTENT表。

篇2:面向程序员的数据库访问性能优化法则

多进程并行访问是指在客户端创建多个进程(线程),每个进程建立一个与数据库的连接,然后同时向数据库提交访问请求。当数据库主机资源有空闲时,我们可以采用客户端多进程并行访问的方法来提高性能。如果数据库主机已经很忙时,采用多进程并行访问性能不会提高,反而可能会更慢。所以使用这种方式最好与DBA或系统管理员进行沟通后再决定是否采用。

例如:

我们有10000个产品ID,现在需要根据ID取出产品的详细信息,如果单线程访问,按每个IO要5ms计算,忽略主机CPU运算及网络传输时间,我们需要50s才能完成任务。如果采用5个并行访问,每个进程访问个ID,那么10s就有可能完成任务。

那是不是并行数越多越好呢,开1000个并行是否只要50ms就搞定,答案肯定是否定的,当并行数超过服务器主机资源的上限时性能就不会再提高,如果再增加反而会增加主机的进程间调度成本和进程冲突机率。

以下是一些如何设置并行数的基本建议:

如果瓶颈在服务器主机,但是主机还有空闲资源,那么最大并行数取主机CPU核数和主机提供数据服务的磁盘数两个参数中的最小值,同时要保证主机有资源做其它任务。

如果瓶颈在客户端处理,但是客户端还有空闲资源,那建议不要增加SQL的并行,而是用一个进程取回数据后在客户端起多个进程处理即可,进程数根据客户端CPU核数计算。

如果瓶颈在客户端网络,那建议做数据压缩或者增加多个客户端,采用map reduce的架构处理。

如果瓶颈在服务器网络,那需要增加服务器的网络带宽或者在服务端将数据压缩后再处理了。

5.2、数据库并行处理

数据库并行处理是指客户端一条SQL的请求,数据库内部自动分解成多个进程并行处理,如下图所示:

并不是所有的SQL都可以使用并行处理,一般只有对表或索引进行全部访问时才可以使用并行。数据库表默认是不打开并行访问,所以需要指定SQL并行的提示,如下所示:

select/*+parallel(a,4)*/* from employee;

并行的优点:

使用多进程处理,充分利用数据库主机资源(CPU,IO),提高性能。

并行的缺点:

1、单个会话占用大量资源,影响其它会话,所以只适合在主机负载低时期使用;

2、只能采用直接IO访问,不能利用缓存数据,所以执行前会触发将脏缓存数据写入磁盘操作。

注:

1、并行处理在OLTP类系统中慎用,使用不当会导致一个会话把主机资源全部占用,而正常事务得不到及时响应,所以一般只是用于数据仓库平台。

2、一般对于百万级记录以下的小表采用并行访问性能并不能提高,反而可能会让性能更差。

叶正盛(MKing)

-12-3

篇3:面向程序员的数据库访问性能优化法则

1 P-DOT模型介绍

传统的BSP模型是P-DOT模型构建的思路来源, 其构成中包含多个迭代, 因此形成了p段的DOT模型。该模型在不同的阶段q内都包含3个层次:首先, 数据层。即D-layer, 应用于分布式系统内, 假设拥有n个数据节点, 由D1至Dn这一数据集都存在其上;其次, 计算层。即O-layer, 假设q为阶段, 独立并发计算在O1至Onq上的nq个工作节点中进行, Oi表示不同的节点, 在应用过程中只对与其相对应的数据进行处理, 其中包括对输入与中间2种数据的处理, 中间结果的显现有储存得到;最后, 通信层。即T-layer, 假设q与p不等, 在q阶段中, ti, j为不同的通信操作子, 消息传递以点对点的方式进行, Oi代表的是q阶段当中的不同工作节点, 其中i的取值为大于等于1并且小于等于nq, q+1阶段中的工作节点Oj得到q阶段内的中间结果, 其中j的取值为大于等于1并小于等于nq+1。值得注意的是, 如果在计算过程中ti, j的取值为0, 则充分说明通信不存在于Oi与Oj当中。同时针对任一阶段, 如果q不等于p, 则上一阶段的输出可以作为输入被下一阶段所用, 不然该输出将被作为最终结果进行储存。

2 模型证明

2.1 时间成本函数的限制性条件

机器内存空间:大数据背景下, 不同的机器节点是存储数据集的主要地点, 具有一定的分散性, 同时有限的内存存在于单个机器当中。在这种情况下, 如果拥有固定的机器数, 但是不断变大的数据规模被输入时, 会不断增大数据量, 促使不同阶段及不同机器承受更多的工作量, 其中涉及初始及中间多种数据。如果单独机器无法对数据量进行保存时, 这部分数据就会在磁盘中存放, 则处理过程中就需要将其从磁盘处向内存中移动, 并通过多次才能够实现有效的处理。如果应用了不同的磁盘组织手段, 数据与内存之间进行传递的过程中就应当拥有小于100MB/s的速度。如果只有1MB的数据集规模, 这一现象是可以顺利进行的, 一旦数据集规模较大时, 将会存在一定的访问问题。在这种情况下对时间成本函数进行构建就要对成分I/O在模型中的体现进行考虑。

机器数:大数据任务内, 输入数据规模常常大于机器数很多, 在这种情况下, 如果n3个机器在数据处理中被应用, 其中n的规模为web, 则该任务不可实现。本文在计算的过程中将n作为机器数, 将w作为输入数据规模。则二者之间的关系是二线性, 同时, O (w) 大于n。

2.2 扩展性证明

ISO-efficiency Function即等效率函数, 在并行计算过程中, 评测其扩展性的过程中对其进行了充分的应用, s作为加速比, E作为效率, 都与其拥有较大的关联性。例如, 如果大数据任务可以有效应用P-DOT并行计算模型进行表达, 则φn作为并行执行时间能够对n个机器节点的任务时间进行表达, 单个机器节点中的时间可以应用φ1表示, 此时为串行状态, 输入w这一数据规模, 则能够对串行状态下的工作量进行表达, 其中w等于φ1。同时, 如果一个大数据任务可以应用P-DOT并行计算模型进行表达, 同时S为记加速比, 它能够表达任务执行时间被并行性所改变的范围, 即S=φ1/φn=w/φn。E为效率, 机器节点被任务利用的状况可以用其显示, 即E=S/n=w/ (n×φn) 。在这种情况下, w=f (n) 这一等效率函数应当存在于E这一任务效率不变的状况下, 研究w这一数据输入规模在n的变化下而变化的状况。

同时, 如果一个大数据任务可以应用P-DOT并行计算模型进行表达, 等效率函数在该任务当中的表达形式为w=O (n2) , 其中输入函数规模为w, 机器数为n。

由以上定理可知, φ=O (w/n+n) ×p为时间成本函数, P-DOT并行计算模型的等效函数可以用以下公式进行表达:

3 P-DOT模型性能优化方法

3.1 数据层优化方法

容错性的基础是数据备份, 有效预防数据丢失产生于失误操作及故障当中, 因此可以复制文件系统内的相关数据。通常, 系统会制作3个以上的重要数据及其备份, 同时会将其放置于不同的位置, 这样一来, 在日后使用的过程中就能够有效的回存。例如, 开源项目Apache Hadoop, 3是其数据默认复本数, 同时其相关的复本布局默认策略为:首先, 一样的数据块产生的一个复本将被一个数据节点保存;其次, 充足的机架产生于集群当中时, 同一数据块的2个复本可以在逐个机架中保存。因此, 不同数据节点可以分散地对数据复本进行储存。

由上可知, 如果一个大数据任务可以应用P-DOT并行计算模型进行表达, n为该任务中的机器数, r为记数据复本数, 数据节点r个会对数据复本进行分散存储VDij, 其中i的取值为大于等于1同时小于等于n, j的取值为大于等于1同时小于等于mi, Dst=Dij为r-1个不同节点上的数据块, 其中s与i的取值不等, 同时t为大于等于1并小于等于ms。

由上可知, 在不同的作业当中, R为数据集, 其值属于D范围, n个数据节点中能够分散保持数据块, 则数据同步加载可在n个节点中以并行访问的方式进行, 其中n为I/O访存加速比的最大取值。然而在应用过程中, 同一数据块的唯一复本是不同节点保存的基础, 因此r个数据节点可以对R数据块进行分散保存, 由此可知, r为I/O访存加速比的最小取值。

3.2 计算层优化方法

在工业不断进步的过程中, 对P-DOT并行计算模型计算层的优化被广泛关注。不断发展的多核技术, 众核GPU在NVIDIA中的体现等, 都促使计算密度和并行处理功能提升。我国传统的并行计算过程中, 性能的提高通过纵向资源计算越来越重要, 这一过程中需要对多核硬件资源进行充分利用。在这种情况下, 单机计算性能需要通过多核间线程级并行来促使大数据任务得以加速。

如果一个大数据任务可以应用P-DOT并行计算模型进行表达, T为该任务在执行过程中的通信层, 将其以2个层次进行展现, 则进程级通信在不同机器节点中的体现应用Tprocess来表达, 不同核间的线程级通信可以应用同一机器节点中的Tthread进行表达, 由此可以得出Ttop=TthreadTprocess, 该公式在应用过程中能够对通信先后顺序进行展现, 及节点内通信应当首先进行, 同时节点间的通信应当后进行。因此, 由于进程间的通信要远远大于线程间的通信, 即O (c) <O (n) , 因此在重发应用多核技术的过程中, 不仅能够促使通信开销始终保持不变, 还能够促使计算性能在任务当中得以提升。

4 结语

在信息技术飞速发展并被广泛应用于各个领域的过程中, 各国在经济建设及社会发展中产生了海量数据, 大数据时代的到来及不断发展, 促使人们在日常工作过程中逐渐转变并行计算模型。现阶段, P-DOT并行计算模型的产生及有效应用, 提高了数据处理的质量和效率, 是科学和信息技术进步的一个重要标志。在这种情况下, 加强面向大数据处理的P-DOT并行计算模型及性能优化的研究具有重要意义。

参考文献

[1]杨靖宇.摄影测量数据GPU并行处理若干关键技术研究[D].郑州:中国人民解放军信息工程大学, 2011.

[2]吕海.多核处理器芯片计算平台中并行程序性能优化的研究[D].北京:北京工业大学, 2012.

[3]王强.异构环境下的航空遥感影像协同存储及处理关键技术研究[D].武汉:武汉大学, 2011.

[4]陈鹏.面向大数据应用的异构可重构平台关键技术研究[D].合肥:中国科学技术大学, 2015.

[5]徐金波.面向目标检测识别应用的算法加速器体系结构研究[D].长沙:国防科学技术大学, 2009.

[6]杨晓亮.Map Reduce并行计算应用案例及其执行框架性能优化研究[D].南京:南京大学, 2012.

篇4:面向程序员的数据库访问性能优化法则

关键词:数据库;Java;JDBC;连接池

中图分类号:TP311.13文献标识码:A文章编号:1007-9599 (2013) 06-0000-02

目前各种各样的软件信息技术都逐渐的融入到了生活中,为社会发展和人们生活做出了极大的贡献。其中Java语言程序的开发和应用,在社会中都有着很大的突破,它不但打破了传统语言程序的模式,还要有效的对其信息技术进行了有效的发展。因此在进行Java程序数据访问时候,要从各方面入手,从而达到信息的最大化。

1Java语言程序的特点

目前Java已经广泛的应用在人们的生活和办公,而与其传统的语言设计程序相比,这种技术有着很好的通用性和高效性,而且随着信息防护技术的较强,Java程序已经将这种技术融入到了该软件的应用当中,从而也提高了该程序的安全性,使得人们的信息技术有了很好的保障。由此可见,我们在进行程序设计开发的时候,对于信息的安全保护这是十分重要的,只有有效的保护了信息,这种软件程序也能收到人们的清青睐。

当我们在进行应用程序的开发时,对于数据库的链接也是十分重要的,如果当程序在运行的时,对于应用程序数据库的没有提高其连接率,那么将会严重的影响着应用程序的功能,这也给人们带来了许多的不便,而且在进行程序开发的过程中,怎么样才能使得数据库得到高效的访问,这对信息技术施工人员来说是十分重要的。而且只有提高应用程序对访问的效率才能使得,该应用软件得到很好的发展。因此,我们可以看出Java数据的访问技术,是Java应用程序的命脉。

2JDBC访问数据库的方式

JDBC是Java中连接数据库的接口技术,它是支持基本SQL功能的—个通用低层的应用程序编程接口。JDBC主要有两类接口:面向程序开发人员的JDBC API和面向JDBC驱动程序的JDBC、Driver和API。Java语言提供了一组用来执行基本的数据库操作的种类和接口的JD—BC API,这些API包含在Java语言的java.sql包中。开发者使用这些API可以完成所有基本的数据库操作,诸如管理JDBC驱动程序,并可进行数据库连接、处理相关的操作、返回操作结果等。JDBC为Java开发人员开发数据库提供了统一的机制,然而在使用JDBC访问数据库的驱动程序的具体实现方式上。

3实现方式的比较分析

Java对数据库访问的方式主要有四种,它们分别是JDBC—ODBC桥接方法、本地API连接方式、网络协议和本地协议。对这些方法分类主要是因为在不同的情况下,这些方法有着不同的运用方式和应用效果。而且不同的访问方式也存在着不同的差异。所以,我们在访问方式的选取的时候,一定要选取合适的访问方法,否知在应用软件运行的时候,将会出现极大的问题,这对人们的办公和生活有严重影响。

3.1JDBC—ODBC桥接方式

这种方式是通过ODBC驱动程序来提供JDBC对数据库的访问。使用该方式,只需要在操作系统中创建数据库管理系统(例如Oracle)的某一ODBC数据源,就可在Java程序中访问该数据源。由于操作系统中的ODBC管理程序目前已基本能支持各种类型的数据源,在Java应用程序中可以直接使用JDK所附带的驱动程序sun.idbc.odbc.Jdbc Odbc Driver进行连接,因此这种方式是一种最便捷的使用方式。但是这种方式由于需要在JDBC API和ODBC API之间进行转换,因此从效率上来说,是最不理想的一种方式。

3.2本地API方式

是一种将标准的JDBC调用转换为本地调用,即转化为某—数据库管理系统(如Oracle)的客户端调用。因此,所调用的JDBC API将实际上转换为特定数据库供应商提供的数据库API,然后通过该数据库供应商的数据库API访问数据库。这类方式的效率比第—类稍高,然而依然存在JDBC API和本地API桥接转换的问题。此外,这种方式要求在每台客户机上预装本地API库,因此不利于应用系统的维护。

3.3网络协议方式

网络协议方式是将JDBC调用转换为独立于数据库管理系统的网络协议。JDBC驱动程序并没有直接和数据库进行通信,而是和一个中间件通信,然后这个中间件和数据库进行通信。这个中间件可将Java应用程序连接到不同的数据库。

3.4本地协议方式

本地协议方式也就是我们常说的本地连接,是采用纯Java驱动程序为基础的一种新型的连接模式,在其应用的时候是通过将JDBC调用系统直接转换为能够为数据库管理做服务的一种结构体系,进而生成一种网络管理协议体系,以保障访问数据库的顺利、持续和科学。这一类驱动器的应用是以驱动程序为基础,有数据库开发商自行开发和研制的一个环节。同时这种方式的应用对于一个生成其他数据库结构都是十分必要和关键的。

通过上述方式进行比较得出,我们可以看出这四种实现的协议连接方式中,网络协议和本地协议的使用和选择在访问率上有着重大的优势,同时存在着众多可移植性的优势,在这两个方面上,这两种连接和驱动方式是极为关键和有力的。在选用访问数据库来作为实现方式的时候,我们应当根据现有工作要求的实际情况入手去总结和归纳,针对程序库中需要访问数据的类型和结构体系来加载合适的处理模式和方法,从而顺利、科学的执行相关命令与要求。

4可复用的数据库连接池机制与实现

在Java程序来进行书库卡访问的时候,数据库的连接可谓是一条不可缺少的条件,也是现代化社会发展中最为关键的一个核心环节。在工作中,需要在访问之初设置一个可靠的连接通道,在访问结束之后需要及时的关闭这一连接通道。这样的访问方式对于预防各种新建、销毁文档有着重要的保护作用,同时还可以增加应用程序的工作效率,降低开发成本,因而在目前的操作中需要针对这一现象加以研究和处理,尤其是针对那些用户和速度要求高的数据库应用系统中,更是要及时的对这些问题加以总结和处理完善,从而使得整个管理体系得到有效的完善。这种结构体系在应用中数据库结构的连接完成之后,能够及时的将数据库的连接交还给连接池,将其中扩展到连接池的功能供应要求,使得其中的配置和管理策略方面的问题都能够得到有效的连接。在此之后,执行数据库的时候就和常规的应用程序相差无几了,其无论是程序类型还是程序连接技术,都能够根据连接管理方式的不同来进行归纳和总结,从而做到因地制宜的访问,以便数据库管理连接的正常、科学进行。

5结束语

当前,由于电子信息化时代的到来给我们的生活带来了极大的方面,让人们在足不出户的情况下,就可以了解到先关的知识点,这对社会的发展和人们的生活都有着极大的作用。目前,随着一些应用程序的普遍使用,人们在开始对其进行了一定的认识。不过由于我国在电子信息处理技术和数据访问技术等方面还是存在着严重的不足,而且这些也是电子信息应用程序的命脉,因此想要将电子信息应用程序进行很好的发展,我们只有对着些程序中存在的问题进行不断的完善和发展,而且在进行相关程序的我们还要向发达国家进行请教,只有这样才能推动我国的电子信息应用软件的发展,才能使人们的生活更加的便利。

参考文献:

[1]李阳,李晓东.基于JDBC的数据库连接池技术的研究[J].科技信息,2009(06).

[2]石义良,邓娟.JSP数据库访问技术研究[J].科技资讯,2009(02).

[作者简介]常红(1980.07.21-),女,汉族,黑龙江大庆人,黑龙江生物科技职业学院讲师,硕士学位,研究方向:计算机科学与技术专业。

篇5:面向程序员的数据库访问性能优化法则

1 JDBC访问数据库的方式

JDBC是Java中连接数据库的接口技术, 它是支持基本SQL功能的一个通用低层的应用程序编程接口。JDBC主要有两类接口:面向程序开发人员的JDBC API和面向JDBC驱动程序的JDBC Driver API。Java语言提供了一组用来执行基本的数据库操作的种类和接口的JD-BC核心API, 这些API包含在Java语言的java.sql包中。开发者使用这些API可以完成所有基本的数据库操作, 诸如管理JDBC驱动程序, 并可进行数据库连接、处理相关的操作、返回操作结果等。JDBC为Java开发人员开发数据库提供了统一的机制, 然而在使用JDBC访问数据库的驱动程序的具体实现方式上, 可细分为4种方法:

1.1 JDBC-ODBC桥接方式 (JDBC-ODBC bridge driver)

1.2 本地API方式 (native-API partiy-Java driver)

1.3 网络协议方式 (net-protocol aii-Java driver)

1.4 本地协议方式 (native-protocol aii-Java driver)

2 实现方式的比较分析

虽然JDBC为Java访问数据库的驱动程序提供了以上四种方式, 但是在不同的场合中应用, 其实现的运行效率也有着很大的差异。因此, 在利用JDBC实现Java程序中对数据库的访问时, 需要结合具体情况, 选用最合适的实现方式, 以保证运行效率。以下就对这四种方式进行分析比较, 以供大家参考。

2.1 JDBC-ODBC桥接方式。

这种方式是通过ODBC驱动程序来提供JDBC对数据库的访问。使用该方式, 只需要在操作系统中创建数据库管理系统 (例如Oracle) 的某一ODBC数据源, 就可在Java程序中访问该数据源。由于操作系统中的ODBC管理程序目前已基本能支持各种类型的数据源, 在Java应用程序中可以直接使用JDK所附带的驱动程序sun.jdbc.odbc.Jdbc Odbc Driver进行连接, 因此这种方式是一种最便捷的使用方式。但是这种方式由于需要在JDBC API和ODBC API之间进行转换, 因此从效率上来说, 是最不理想的一种方式。

2.2 本地API方式。

是一种将标准的JDBC调用转换为本地调用, 即转化为某一数据库管理系统 (如Oracle) 的客户端调用。因此, 所调用的JDBC API将实际上转换为特定数据库供应商提供的数据库API, 然后通过该数据库供应商的数据库API访问数据库。这类方式的效率比第一类稍高, 然而依然存在JDBCAPI和本地API桥接转换的问题。此外, 这种方式要求在每台客户机上预装本地API库, 因此不利于应用系统的维护。

2.3 网络协议方式。

网络协议方式是将JDBC调用转换为独立于数据库管理系统的网络协议。JDBC驱动程序并没有直接和数据库进行通信, 而是和一个中间件通信, 然后这个中间件和数据库进行通信。这个中间件可将Java应用程序连接到不同的数据库。

2.4 本地协议方式。

是一种纯Java驱动程序, 将JDBC调用直接转换为数据库管理系统使用的网络协议, 从而直接访问数据库。这一类的驱动程序通常直接由数据库厂商自行开发。这种方式对于企业内部的应用是很高效的。通过以上分析比较, 我们可以看出, 这四种实现方式中, 网络协议方式和本地协议方式的使用在访问效率和可移植性这两方面来说, 还是相对比较有优势的。在选用访问数据库的实现方式时, 可以根据实际情况通过比较分析, 选用合理的实现方式。但是无论采用哪种驱动方式, 在Java程序中访问数据库的实现方式是类似的, 通常包含:加载合适的JDBC驱动程序, 连接数据库, 执行SOL语句, 处理执行结果这四种实现方式。

3 可复用的数据库连接池机制与实现

在Java程序中访问数据库时, 数据连接是必不可少的条件。在需要访问时, 就要建立连接, 访问结束后, 同样还需要关闭连接。这样建立、销毁的循环操作大大增加了应用程序的开发成本, 也降低了开发效率, 因而数据库连接操作往往成为数据库应用程序的主要性能瓶颈之一, 尤其是对于那些多用户、高并发度的数据库应用系统。数据库连接池技术的发现和应用很好的解决了这一难题, 为我们在编程工作中提供了便利的条件, 加速了工作进度也保障了数据库技术的稳定和安全。连接池的基本思想就是先建立一些数据库连接放置在内存对象中以备使用。当数据库应用程序需要访问数据库时, 只需从内存中直接获取已经建立的数据库连接, 无需另行创建数据库连接。数据库应用程序结束数据库访问后, 释放数据库连接, 从而将数据库连接交还给连接池。JDBC的扩展API提供了连接池功能。使用Java中的容器类可以很方便地构建连接池。在系统初始化时, 根据配置创建连接并放置在连接池中。在这种情况下, 数据库连接是由连接池共享的。Java应用程序可以在连接池中找到一个数据源并从中获得可管理的连接, 而不是装载一个JDBC驱动程序并由驱动程序来获取连接。在此之后, 执行数据库操作就与常规的应用程序类似了。数据库连接池技术根据连接池管理方式的不同可分为, 户管理的数据库连接池和应用服务器管理的数据库连接池两种类型。无论是采用哪种连接池的方式, 都需要根据具体应用分析实际情况, 仔细斟酌权衡这些参数, 以实现数据库连接池被很好的应用在数据库连接中。

结束语

随着Java程序在计算机行业的普遍应用, 如何高效的实现与数据库的连接成为眼下计算机程序开发和利用技术的重要研究对象。在目前的技术条件下, 在使用Java程序进行开发应用程序时, 所选用的具体技术和实现方式以及应用方法, 对于实际应用过程中的工作效率都是有着极大影响的, 也是实现Java程序中数据库远程访问和跨平台目标的关键。随着科技的不断进步与发展, 还需要IT科技人员不断的创新与发展, 实现Java程序的不断改进和完善, 使其自身技术及相关参数得到很好的提高, 实现访问数据库时的高效率连接方式。

摘要:自第三次工业科技革命之后, 电子计算机及其相应的信息技术的发展日新月异。目前整个社会已经呈现出信息全球化的趋势, 信息的共享与传播给人们的生活带来了很大的改变, 使社会得到了更好的发展。Java就是在科技与信息不断发展的过程中被开发利用的一种程序设计语言。这种程序设计语言可以直接跨平台撰写应用软件的面向对象。以下本文就对目前Java程序中访问数据库的各种技术进行详细介绍, 并进行了比较分析。

关键词:数据库Java,JDBC,连接池

参考文献

[1]何洪舟.Java程序中访问Oracle数据库的技术分析与实现[J].计算机应用与软件, 2007, 5.

篇6:面向程序员的数据库访问性能优化法则

JSP是由Sun公司推出的基于Java的新一代站点开发语言, 它具备Java的优点:稳定、安全、移植性好。在JSP中使用JavaBean和Servlet等, 可以开发功能强大的Web站点程序, 尤其是在访问Web数据库的操作方面。近年来, JSP技术得到了越来越广泛的应用, 几乎所有基于Java的Web应用都使用了JSP。

2 基于JSP的数据库连接技术

数据库访问对动态Web网站来说是最为重要的部分, 选择合适的数据库连接方式可以提高网站的访问效率。在JSP中, 常用的数据库连接方法有JDBC技术、JavaBean技术和连接池技术。

2.1 JDBC技术

在Java中JDBC (Java Database Connectivity) 是常用的数据库连接技术。通过JDBC技术与数据库相连有两种方法:一是通过JDBC-ODBC来连接各种数据库 (支持ODBC驱动程序的) ;第二种方法是通过JDBC驱动程序来连接数据库。SUN公司开发了JDBC-ODBC桥, 通过该连接桥, Java程序可以访问带有ODBC驱动程序的数据库。目前, 常用数据库系统都带有ODBC驱动程序, 所以Java程序能访问市面上大多数流行的数据库, 如MS SQL Server、Oracle和MS Access等数据库。JDBC-ODBC桥连接使用简单, 易于编写和维护。

2.2 JavaBean技术

JavaBean技术是一种组件, 可以重复使用并且跨平台, 它为程序员提供了一种很好的问题解决方案。程序员可以用JavaBean技术来封装事务, 能够很好地实现业务逻辑与客户端操作的分离, 使系统的灵活性和适用性更强。这种方法就是将数据库的基本操作封装在一个JavaBean包中, 通过JSP来调用JavaBean从而实现数据库的连接。使用时应先对Java编写的数据库连接操作的程序进行编译, 生成*.class文件, 然后通过JSP来调用JavaBean来操作数据库。该技术提高了代码的重用程度并大大简化了程序设计的难度。

2.3 连接池 (Connection Pool) 技术

连接池就是很多数据库连接对象的集合。它的工作原理包括以下3个步骤:①连接池的建立;②连接池的管理;③连接池的关闭。当外部应用程序需要访问数据库的时候, 不是直接新建一个数据库连接, 而是向连接池中申请一个连接。具体在编写代码时, 连接池技术的使用方法大致有以下几种:①连接池的建立、管理和关闭全部写在一个程序代码文件中;②在server.xml文件中对连接池进行全局配置, Tomcat服务器下的Web程序都适用该配置;③使用C3P0架包, 这是一个开放源代码的JDBC连接池, 和Hibernate一起发布在lib目录下, 其中包含了用来实现JDBC3和JDBC2扩展规范说明的对象——Connection、Statement池的DataSources对象。在多用户并发访问的情况下选择合适的连接池使用方法, 可以提高连接时的速率和节省连接所耗费的时间。

3 数据库访问性能优化

3.1 数据库的连接和关闭

当JSP页面需要频繁地访问数据库时, 必然要频繁地连接和断开数据库。每次连接必须完成用户验证、安全上下文配置等任务, 这就要占用一定的通信和内存资源, 因此往往会成为最耗时的操作。所以当一个动态网站频繁地从数据库中存取数据时, 为提高整个系统的效率可用使用连接池技术, 连接池改善打开和关闭数据库对性能的影响。数据库连接池是一个用于存储数据库连接的容器, 它是编写应用服务时经常需要用到的模块, 当应用程序需要连接数据库时直接从连接池中获取一个连接, 当使用结束时, 再将这个连接交还给连接池供其他应用程序使用。这样, 一个数据库连接可以被很多应用程序实例共享, 应用程序无须在每次与数据库交互时都进行连接和断开操作, 从而大大提高了访问数据库的效率。

3.2 使用存储过程

存储过程是存储在服务器上的一组预编译的SQL语句, 类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能, 信息处理极为迅速。使用存储过程可以避免对命令的多次编译, 在执行一次后其执行规划就驻留在高速缓存中, 以后需要时只需直接调用缓存中的二进制代码即可。另外, 存储过程在服务器端运行, 独立于JSP程序, 便于修改, 最重要的是它可以减少数据库操作语句在网络中的传输。

3.3 优化查询语句

JSP中连接数据库消耗的资源相当大, SQL语句运行的时间越长, 占用系统资源的时间也越长。因此, 尽量使用优化过的SQL语句以减少执行时间。比如, 不在查询语句中包含子查询语句, 充分利用索引等。

4 结论

不同的数据库连接方法各有各的优缺点, 比如, JDBC技术, 该技术不仅使用简单、可移植性比较强, 而且编写和维护起来都比较简单, 使用它可以高效地实现与大部分数据库的连接, 但是它也有自己的局限性, 比如, 访问数据库的速度比较慢等;JavaBean技术虽然提高了程序代码的重用程度, 并且简化了程序设计与编写的复杂程度, 但是该技术与数据库连接时所消耗的时间比较多, 当有过多用户进行并发访问时, 反而会导致数据库的运行效率低下;连接池技术的功能在小负载的系统中不能体现, 但随着负载的增加系统的性能会有体现。因此, 程序员在编程时, 应权衡利弊, 选择合适的数据库连接方式, 特别是在做复杂的Web网站时, 可以把这三种数据库连接技术结合起来使用, 对数据库做必要的性能优化, 就能大大提高程序访问数据库的效率。

参考文献

[1]李迎秋, 姜仲.JSP实用教程[M].大连:大连理工大学出版社, 2007.

[2]刘志成.JSP程序设计案例教程[M].北京:清华大学出版社, 2007.

[3]孙叶枫.JSP中基于连接池的数据库访问技术[J].计算机应用, 2004 (6) .

篇7:数据库查询优化提高网站访问速度

随着网络的高速发展,网站已经成为政府、公司企业、个人不可或缺的部分。成千上万的网站混迹于网络潮流中,为获得更多的访问量绞尽脑汁。

能吸引更多的访问者访问,网站必须具备两个主要因素:有用的内容和可接受的访问速度。当网络中有类似主题的网站推出时,能吸引访问者的因素唯一为可接受的访问速度。

调查表明,网站页面的显示速度如果超过5秒,除了少数有毅力和耐心的客户能够等到所有的内容打开,大多数人早已厌倦而离开。

提高网站的访问速度,特别是对于大型的应用网站,必须面对大量用户访问、高并发请求,必须从多个环节进行优化:使用高性能的服务器、高性能的数据库、高效率的编程语言、高性能的Web容器。

几乎所有的网站都不可避免地使用数据库管理系统来存储网站数据,数据库方面的原因是衡量网站好坏至关重要的一部分。下面将重点阐述在网站设计过程中关系数据库查询优化对于提高网站访问速度的重要性。

1 查询优化的必要性

以一个中大型电子商务应用网站为例,详细描述数据库查询优化的必要性。

查询购买了3号商品的顾客(会员)的姓名。用SQL语言表达如下:

Customer表用来保存顾客基本信息,CLog表用来保存顾客购买信息。假设顾客基本信息、购买数据库中有10000个顾客记录,100000个购买记录,其中购买3号商品的记录为100个。

系统可以用多种等价的关系代数表达式来完成这一查询:

还可以写出几种等价的关系代数表达式,但分析这三种情况就足以说明数据查询优化的必要性。下面将分别分析由于查询执行的策略不同,查询的速度产生很大的差别。

1.1 第一种情况

(1)计算广义笛卡尔积

把Customer和CLog的每个元组连接起来。一般连接的做法是:在内存中尽可能多地装入某个表(如Customer表)的若干块元组,留出一块存放另一个表(如CLog表)的元组。然后把CLog中的每个元组和Customer中每个元组连接,连接后的元组装满一起后就写到中间文件上,再从CLog中读入一块和内存中的Customer元组连接,直到CLog表处理完。这时再一次读入若干块Customer元组,读入一块CLog元组,重复上述处理过程,直到把Customer表处理完。

设一个块能装100个Customer元组或1000个CLog元组,在内存中存放10块Customer元组和1块CLog元组,则读起总块数为:

其中,读Customer表100块。读CLog表10遍,每遍100块。若每秒读写50块,则总计要花22秒。

连接后的元组为104×105=109。设每块能装100个连接后的元组,则写出这些块要用109/(100×50)=2×105秒。

(2)作选择操作

依次读入连接后的元组,按照选择条件选取满足要求的记录。假定内存处理时间忽略,这一步读取中间文件花费的时间(同写中间文件的时间一样)需2×105秒。满足条件的元组仅100个,均可放在内存。

(3)用投影

把第2步的结果在Cname上作投影输出,得到最终结果。

因此,第一种情况下执行查询的总时间≈22+2×2×105≈4×105秒,这已经是忽略了所有的内存处理时间。

1.2 第二情况

(1)计算自然连接

执行自然连接时,读取Customer和CLog表的策略不变,总的读取块数仍然为1100块,花费22秒。但自然连接的结果比第一种情况大减少,仅为Clog表的记录个数105个。因此写出这些元组时间为105/100/50=20秒,仅为第一种情况的千分之一。

(2)执行选择运算,读取中间文件块,花费时间跟写中间文件一样为20秒。

(3)作投影,把第2步的结果投影输出。

第二种情况执行总时间≈22+2×20≈62秒。

1.3 第三种情况

(1)先对CLog表作选择运算,只需读一遍CLog表,存取100块花费时间为2秒。因为满足条件的元组仅为100个,不必使用中间文件。

(2)读取Customer表,把读入的Customer元组和内存中的CLog元组作连连接。也只需读一遍Customer表,共100块花费时间为2秒。

(3)把第2步连接的结果用投影输出。

第三种情况执行总时间≈2+2≈4秒。

这个简单的例子已经足够表明,查询优化的必要性,三种不同的情况查询的代价由4×105秒变为62秒再减少到4秒。从这个例子也已经看出查询优化的初步思想:在查询过程中先做选择操作,再做连接操作,这样就大大减少了参加连接的元组。

2 查询优化基本策略

2.1 优先选择运算[1]

优化策略中最重要、最基本的一步。从上面的例子可以看出,第二种情况下先做选择运算,比起第一种情况,计算代价呈指数级降低。特别是大型的电子商务应用网站,数据库中积累了海量的数据,如果不先做选择运算,中间结果大小的增长甚至是高性能服务器有时也难于承受。

2.2 使用索引[1]

在执行数据表的查询连接前通常应对关系适当地预处理。预处理的方法主要是在连接属性上建立索引,然后执行连接。例如自然连接Customer∞CLog,使用索引的步骤是:

(1)在CLog上建立Cno的索引;

(2)对Customer中每一个元组,由Cno值通过CLog的索引查找相应的CLog元组;

(3)把查找的CLog元组和Customer元组连接起来。

这样Customer表和CLog表都只要扫描一遍,处理速度只是两个关系大小的线性函数。

2.3 其他优化策略

上面两条为主要的优化策略,其实这里讨论的优化策略通常情况下可以提高查询效率,但不一定是所有策略中最优的。下面简单提到其它比较重要的优化策略,不做过多详细说明。

(1)使用存储过程。

(2)清理垃圾数据。

(3)将语句提交给DBMS的查询优化器,查看SQL语句的查询计划和评估分析是否是优化的SQL优化的策略有很多,如有些人还建议在海量查询时尽量少用格式转换、尽可能不使用占用大量资源的游标、查询时不要返回不需要的行、列等等。所有这些不可能一一列举,实际应用中应该结合具体的数据库结构情况。

3 结束语

查询优化只是数据库技术提高网站访问速度其中一个方面,下面的公式反映出多用户数据库查询时必须考虑的时间代价包括多方面。

总代价=I/O代价+CUP代价+内存代价+网络传输代价。

由此可以看出,糟糕的数据库设计以及低效率的查询语句将严重消耗服务器的I/O资源、CPU资源、内存资源和网络资源,而低性能的软硬件设备(包括服务器技术、数据库管理系统)都将是网站访问速度的瓶颈。

所以解决因数据库技术引起的网站访问速度问题,要考虑的问题包括:服务器性能(处理能力)、数据库管理系统、数据库设计、数据库维护、优化的查询语句,所有这些都有大量的工作要做。

摘要:数据库是网站非常重要的一部分,数据库因素的好坏直接影响网站的性能。本文主要论述了网站应用中数据库查询优化的必要性,并提出一些查询优化的策略,作为提高网站访问速度数据库技术方面的参考。

关键词:网站访问速度,数据库,查询优化

参考文献

[1]萨师煊,王珊.数据库系统概论[M],北京:高等教育出版社,2000.

[2]邹建.SQL Server2000开发与管理[M].北京:人民邮电出版社,2006.

上一篇:四年级语文教学建议下一篇:劳动仲裁代理词免费