Delphi中带缓存的数据更新技术
2008-04-09 04:18:39来源:互联网 阅读 ()
一. 概念
在网络环境下,数据库应用程序是c/s或者是多层结构的模式。在这种环境下,数据库应用程序的开发应当尽可能考虑减少网络数据传输量,并且尽量提高并发度。基于这个目的,带缓存的数据更新技术应运而生,其大致过程就是:应用程序将数据库中数据提取到客户端的缓冲区,在缓冲区中完成数据的修改、更新、以及新数据的插入等操作;等操作完成之后,在一个合适的时间,一次性的将数据提交给数据库,从而大大减少了网络流量,减小了数据库服务器的负载,提高了并发性能。
应当说,这并不是太新的技术,在delphi等数据库前端开发工具较早期版本中,就已经对这种技术做出了的支持。但是笔者发现一些程序员并不注意这种技术的合理运用,依然停留在单机应用程序的思路下,导致所编出来的程序效率低下或者出现潜在的错误。因此有必要对该技术的优点、运用原则以及运用方法(以delphi为例)做一个总结。
二. 优缺点
带缓存的数据更新技术主要有如下几个优点:
(1) 最大限度的减少了网络流量,减少了数据存取的时间。提高了客户端数据库操作人员的效率。
(2) 减轻了数据库服务器的负担,因为许多反复的更新、修改、删除操作可以在客户端的缓冲区内完成,最后只把结果提交给服务器。
(3) 有效缩减事务(transaction)处理的时间,减少了并发事务的吞吐量。从而更能够保证数据库的一致性。
我们可以举个例子来说明其优越性:数据库操作员往数据库中插入一条数据记录,但马上发现该记录不合要求,于是将该数据删除。这一过程,如果采用不带缓冲的数据更新技术,则服务器端将执行一次插入操作,一次删除操作,在客户端和服务器端进行往返两次的数据传输,而且如果此数据与其他的数据库表有级联关系,还必须考虑到数据的级联更新、删除、恢复等操作。如果采用带缓存的数据更新方法,则可以在客户端的数据缓冲区完成这两步互逆的操作,而不会给服务器端带来任何动作,不会产生任何网络数据传输以及数据的级联更新操作。由此可见带缓冲的数据更新技术的巨大优势。
带缓存的数据更新有一个缺点就是因为数据是在客户端存放的,所以该数据如果被其它用户更改的话,会产生丢失修改等不一致状况,需要考虑其并发控制的细节,充分考虑那些多变的数据可能出现的不一致的情况。这种技术的运用需要一定的技巧与一定的思维转变。
三. 运用原则
任何技术的优越性都是在一定的环境中体现出来,带缓冲的数据库更新技术主要在以下几种情况下运用更有优势:
(1) c/s或者多层的数据库应用的场合。这种情况下,可以有效降低网络流量。在单机情况下,该技术没有意义。
(2) 在多表的数据更新场合。例如主表/明细表(master/detail)结构的更新中,往往两个表的增删是相互影响的,那么在客户端完成两个表的所有更新之后,最后可以定义一个事务来提交所做的更新操作。这样便有效的缩短事务的时间,更好的保证了数据的一致性。
(3) 服务器负载能力有限的场合。如今,随着pc机的速度提高以及价格的降低,客户机和服务器的能力差别越来越小,服务器的服务能力相对地下降了。客观上要求从软件的角度来降低服务器的负担,而带缓冲的数据更新则通过客户端分担一部分更新任务的方式,降低了服务器的负担。
(4) 数据被同时更新的概率比较低的场合。如果数据库中同一条数据很可能在同一时段被多个用户更新,那么这种情况就不适合带缓存的更新,因为在这种情况下,容易产生数据的错误覆盖,从而导致数据的不一致。
四. Delphi中的控制方法概述
Delphi作为一个流行的数据库开发工具,具有丰富的数据库操纵功能。在带缓冲的数据存取技术上,delphi做出了很全面的支持。通常,delphi为用户提供了TTable和TQuery等几种存取数据库表的数据集控件;提供了TDBNevigator控件,可以对数据集进行增、删、改、查询等操作。在数据集的属性控件中有一个cachedUpdate选项,将这一项设为true,delphi即允许以缓冲的形式来存取该数据集,也就是说对数据集所做的更新操作不会立刻自动反映到数据库服务器,而只有调用实际提交的方法(如applyUpdates()等),delphi才将实际提交的数据反映到数据库,同时通过数据集的on UpdateRecord()方法,来定义在实际更新数据库表时需要同时进行的操作(如级联删除等)。这样就为我们自己来控制数据提交的步骤提供了方便,虽然这使编程的难度有所增大,但是在某些场合我们需要这样的灵活性。而且通过这种模式,确实大大减少了事务的长度、降低了网络流量、增加了应用程序的可靠性。下面我们举一个具体的应用模块来说明如何运用这种编程模式。
(1) 应用背景说明
假设我们做一个商品定单处理的模块。在这个模块中涉及三个数据库表:订单表Order (有订单号OrderID、金额SumMoney、日期date、客户姓名costomer等字段),订单明细表OrderDetail(有订单明细号detailID、订单号OrderID、商品编号CommondityID、数量amount、单价price等字段),库存表storage(有商品编号CommondityID、现有库存量stocks等字段)。其中,订单与订单明细表是一对多的关系,以订单号OrderID作为连接字段。每当新增一份订单的时候,都必须修改库存表,将卖出的相应商品的数量从库存中减去。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Delphi中票据凭证的精确打印
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash