ODAC(V9.5.15) 学习笔记(十五)数据离线模式

时间:2023-03-09 19:09:09
ODAC(V9.5.15) 学习笔记(十五)数据离线模式

数据离线模式(Disconnected Mode)是指数据库只有在需要的时候才连接,数据的处理放在客户端内存缓冲区中完成。这样做最大的好处是减少了网络资源依赖,对数据库服务器的资源开销和压力也减少。如果客户端需要经常反复地连接和关闭数据库连接,也可以采用ODAC的连接池模式。

要实现数据离线模式,需要完成以下几个步骤:

1、设置连接组件的选择项,将离线模式设为True,自动提交属性保持缺省值True,如下:

TCustomDAConnection.Options.DisconnectedMode := True;

TCustomDAConnection. AutoCommit := True;

此时数据库连接会在数据集进行数据获取、SQL执行等动作时自动开启,并在执行完成后自动关闭,所做的数据变更操作自动提交事务。

2、开启连接组件的连接池功能,将Pooling设置为True,如下:

TCustomDAConnection.Pooling := True;

3、可以设置数据集的参数,开启本地缓存,包括:

//启动本地缓存模式

TDataSet.CachedUpdates := True;

//一次性获取全部数据,对数据量大的表格慎用

TCustomDADataSet.FetchAll := True;

//开启主从关系的本地缓冲

TCustomDADataSet.Options.LocalMasterDetail := True;

//开启网络自动连接功能

TCustomDAConnection.Options.LocalFailover := True;

//批量提交数大于缺省值1,减少网络通信次数

TCustomDADataSet.Options.UpdateBatchSize := 10;

需要说明的有几点:

1、数据集的FetchAll为True时,会一次性获取全部数据,然后自动关闭连接,对已数据量少的表可以这样做,但是对于大数据量的表要慎重,或消耗较长时间。当FetchAll为False时,如果数据没有全部获取到本地,则连接不会关闭,连接会持续到所有数据均获取到本地后才自动关闭。

2、如果数据库连接手动显性开启了事务,则连接不会在SQL执行后自动关闭,而是要等待手动显性事务提交或回滚后再关闭。

3、当一个Query类控件手动显性执行了Prepare命令,连接不会在SQL执行后自动关闭,而是要等待手动显性UnPrepare命令后或SQL变动后再关闭。

4、如果数据集采用了Lock模式锁定当前记录(TCustomDADataSet.LockMode = lmLockImmediate),则连接会在用户编辑记录期间一直开启,直到用户Post或Cancel记录编辑。

以上2、3、4说明:凡是显性手动动作将影响数据库连接的自动关闭功能,需要手动显性反向操作后,数据库连接才会自动关闭。

5、如果数据库连接的网络不稳定,可以开启网络自动连接功能(LocalFailover := True),如果网络很稳定则可以不要。

6、在数据提交数据库服务器时,可以通过设置批量处理的数量(UpdateBatchSize := 10),让客户端一次性提交多个处理,减少网络通信次数,从而减少网络风险,对网络不稳定的情况有用。