数据库访问离线处理分析设计

时间:2022-07-19 04:51:25

数据库访问离线处理分析设计

摘要:本文首先介绍并分析了数据库访问离线处理中常用的以数据为中心的方法和面向服务的方法,最后对离线处理当中可能会出现的数据并发异常提出了一个可行的设计方案。

关键词:数据;服务;离线处理;并发

随着管理信息系统在行业中的应用日益普及,对基于数据库的管理信息系统的离线使用需求也日益增多,许多业务需要在不能持续联机的情况下使用管理信息系统。这样的需求,需要有C/S模式的桌面应用程序,也要求能够象B/S模式使用那样便捷,这些在传统的B/S或者C/S模式中都很难直接实现。

有两个方法可以解决离线需求:以数据为中心的方法和面向服务的方法。

一、以数据为中心的方法

与服务器上的数据相结合的应用程序使用以数据为中心的方法。本地数据库管理对本地保存的数据所作的更改,然后使用合并复制将这些更改传回服务器。

首先,客户端创建对所需数据的订阅,这样客户端就可以在脱机之前将该数据复制到本地数据存储区中。一旦客户端脱机。它将通过对本地数据存储区的调用,对本地数据进行更改。然后,当客户端重新联机时。数据存储区的合并复制机制将对客户端数据所作的更改传回服务器。对服务器数据所作的更改也可能会传到客户端。在合并阶段遇到的任何冲突,将根据服务器或客户端上指定的冲突解决规则,或根据数据存储区管理员定义的自定义规则来进行处理。

采用Dojo技术实现的Moxie离线编辑器采用的就是这种方法。

二、面向服务的方法

面向服务的方法通过服务请求与网络上的服务进行交互。这些服务可能作为Web服务来实现。或者通过某种其他机制来实现,但是该方法的基本特征是:客户端并没有与它使用的服务紧密结合在一起,客户端和服务是彼此独立的。在此方法中,客户端可以自由地与所需的任何服务进行交互。此外,客户端将重点放在服务请求本身上,而不是放在对本地保存的数据进行直接更改上。服务请求可能会导致客户端或服务器上状态更改,但这些更改只是服务请求的副作用。

以数据为中心的方法,要求在客户端上安装本地数据存储区,这使客户端的部署较为困难,并且客户端对数据存储区架构所作的更改会直接影响客户端查询结果,在线时再使用合并复制将这些更改传回服务器,容易在离线操作时让客户端误以为上传成功,造成信息的及时性得不到保证。再者大多系统要求在网络中传输信息须采用加密方式。也就是说客户端和服务是彼此独立的。因此此时采用面向服务的方法来实现离线处理比较合适。

微软提出的智能客户端在离线处理设计时采用的就是以上面向服务的方法。如果连接是处于在线状态的,利用ADO NET里的DataSet将临时存储的数据暂时保存在内存中,数据在内存中存储只是一个临时过渡,当数据需要经过操作后保存回远程数据库时,使用DataSet的数据适配器DataAdapter将变化的量返回数据库操作。这样既加快了本地的反应又节省了带宽。如果。应用程序在断线的状态下工作,则将数据保存回本地的数据存储结构,待再次连线时。进行处理。

但是这种自动生成SQL语句来更新服务端数据库的方式,不便于SQL语句的加密,而对于某些系统来说,由于信息的敏感性,即便是SQL语句(例如insert语句就包含较多敏感信息)也需要加密处理,因此,这些系统在离线状态,建议采用所有对数据库操作的SQL语句都以文本文件的形式缓存,当恢复在线时,系统首先判断该文件中是否有未成功提交的SQL语句,如果有则依次读取并加密提交。

兰、数据并发异常的解决

此时容易引起多个用户同时更新一条记录产生数据并发异常。这个操作,既可能是其他用户删除了该行记录,也可能是修改了某个字段。这种并发不可避免,在ADO,NET中,通常处理并发冲突的方法有两个,其一是保守式并发处理。该方法使某条记录被读出后就一直被锁定,直到该用户提交更新,这种方式的缺点是在某一用户提交更新前,其他用户要一直等待;其二是开放式并发处理,该方法就是要针对并发异常的出现情况,制定出具体处理方法来解决或者提示用户这种异常的出现。开放式并发处理需要注意以下两个问题。

更新方式的选择:更新方式有缓存更新和立即更新两种。缓存更新,就是使用dataadapter,updte()方法来进行数据的更新,用户可能在datagrid中修改了很多记录,而只进行一次提交,那么这种操作如果从读取数据开始(或上次更新操作)算起所距离的时间越长,也就越容易引起并发冲突。相对来说,立即更新,也就是使用command,executenoquery()方法。直接来提交对一条记录的修改应该比较快捷。

更新逻辑的选择:所谓更新逻辑就是按照哪种更新的方式来对数据进行更新操作。它可以是包含所有列或部分列,这种更新方式要么导致用户更新失败,要么引起更新覆盖。使数据的一致性得到不到保证。使用集中的时间戳,即在数据库中定义一个集中的时间戳表,用于记录对任何表中的任何行的更新。例如,时间戳表可以显示以下信息:“某时刻张三更新了某表某行”。集中的时间戳适用于签出方案以及脱机客户端方案。

因此,本文作为脱机客户端方案采取开放式并发处理的方法解决数据并发异常。在实际应用中,用try{}catch{}语句返回冲突错误提醒用户。更新方式的选择采用立即更新减少并发冲突,对于离线用户等不可避免的并发冲突,使用集中的时间戳,当用户要修改的信息已被其它用户修改,则提醒用户,用户可以再次请求修改或不修改。

参考文献

[1]杨华智能客户端离线处理的分析与实现,2008.

[2]Smart Client Offline Application Block../library/default.asp.

上一篇:Windows7备份与还原功能详解 下一篇:菜鸟必看打印机常见故障及解决方法