ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式:

1、在数据库中进行分页处理;

2、获取所有数据,只是快速返回第一页数据。

第一种方案对应用服务器资源消耗最小,对数据库消耗略大,在客户需要对全数据进行灵活过滤、查找、统计时就有些不够用了,另外对耗时较大的SQL查询就不如第二种方案速度快,对数据库压力也要大些,并且需要编写程序来完成。在Delphi下我考虑使用第二种方案,尤其是在使用uniGUI+ODAC配合使用时。第二种方案对应于服务器内存压力略大,并且要求快速获取第一页数据,为此做了个实验:

1、单表中有24万条记录

2、使用一次性获取全部记录,并放在服务器内存中,由uniGUI的网格进行自动分页处理。

3、非一次性获取全部记录时,需要快速获取第一页数据,将TOraQuery组件的FetchRows设置与TUniDBGrid组件的WebOptions.PageSize一致(不是必须的,只是觉得这样对显示第一页更有效率些),再通过启动一个线程,在后台通过TOraQuery组件的FetchAll属性设为True来获取全部数据。TOraQuery的数据量发生变化后,在TUniDBGrid组件中滚动任意记录都会触发记录数与分页数的自动更新,所以不需要在获取全部数据后刷新网格。

代码如下:

procedure TMainForm.UniButton11Click(Sender: TObject);
var
d : DWORD;
begin
//计时
d := GetTickCount;
//每个数据包获取的记录数,建议与网格的每页数保持一致
UniMainModule.OraQuery7.FetchRows := UniDBGrid7.WebOptions.PageSize;
//是否一次性获取
UniMainModule.OraQuery7.FetchAll := UniCheckBox7.Checked;
//开启表,如果是非一次性获取,则中获得了第一个数据包的记录数
UniMainModule.OraQuery7.Open;
//花费时间
UniLabel17.Caption := Format('%d ms', [GetTickCount - d]);
//开启线程获取
if not UniCheckBox7.Checked then
TFetchThread.Create(UniMainModule.OraQuery7);
end;

UniCheckBox7.Checked决定了是否采用一次性获取的选项,实验显示:

1、一次性获取数据模式,显示第一页花费了3000ms左右时间,内存占用约180M,关闭数据集后内存减少为10M左右,说明内存释放非常干净。

2、非一次性获取数据模式,显示第一页花费了约20ms左右时间,后台读取数据没有影响前端数据的展示、滚动等操作,最终内存占用与关闭后释放同一次性获取模式。

后台获取数据的线程代码如下:

  TFetchThread = class(TThread)
private
FDataSet : TOraQuery;
public
procedure Execute; override;
constructor Create(ADataSet : TOraQuery);
end;
{ TFetchThread }

constructor TFetchThread.Create(ADataSet: TOraQuery);
begin
FDataSet := ADataSet;
FreeOnTerminate := True;
inherited Create;
end; procedure TFetchThread.Execute;
begin
inherited;
if Assigned(FDataSet) then
begin
FDataSet.FetchAll := True;
while not FDataSet.Fetched do
Sleep(); MainForm.Caption := 'refresh';
end;
end;

效果基本满意

ODAC (V9.5.15) 学习笔记(二十)大数据量获取处理的更多相关文章

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

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

  2. PowerDesigner 15学习笔记:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  3. ODAC(V9.5.15) 学习笔记(十二)TOraLoader

    名称 类型 说明 Columns TDAColumns 需要载入数据的每个字段定义 LoadMode TLoadMode 载入模式,包括: lmDirect 通过内部数据缓冲区载入到数据库中 lmDM ...

  4. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成

    ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序 ...

  5. ODAC(V9.5.15) 学习笔记(十八) 数据集缓冲模式

    数据集的缓冲模式(Cached mode)是将数据库服务器的数据缓冲在客户端内存中进行处理,不再依赖服务器.只有当数据需要提交数据库服务器进行保存时,才将变更数据一次性提交数据库服务器. 数据集缓冲模 ...

  6. ODAC(V9.5.15) 学习笔记(十六)直接访问模式

    直接访问模式(Direct mode)是ODAC最大的特色之一,即不需要安装Oracle客户端,ODAC越过了OCI(Oracle Call Interface ),使用TCP/IP协议就可以直接与O ...

  7. ODAC(V9.5.15) 学习笔记(十四)TCRBatchMove

    名称 类型 说明 AbortOnKeyViol Boolean 在处理数据时,如果发生主键冲突或主键校验失败时,是否中断 AbortOnProblem Boolean 发生问题时是否中断 Change ...

  8. ODAC(V9.5.15) 学习笔记(十)TVirtualTable

    名称 类型 说明 Options TVirtualTableOptions 选择项,包括: voPersistentData:在数据集关闭时不处理其相关数据内容 voStored:设计期对数据集的处理 ...

  9. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  10. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

随机推荐

  1. C++ Primer学习笔记二

    vector<int> a(10,0); for(vector<int>::iterator itor=a.begin();itor!=a.end();itor++) *ito ...

  2. [翻译]-马丁·福勒-page对象

    译者注:这篇文章翻译自马丁·福勒(Martin Flower,对,没错,就是软件教父)官网的一篇文章,原文出处在文底.如果你正在做WEB自动化测试,那么我强烈推荐你看这篇文章.另外透露Martin F ...

  3. C#课外实践——校园二手平台(技术篇1)

    前面分享了这次的课外实践的心得,这次,就分享一下从这次的课外实践的过程中学到的知识技能吧.虽然有句话说的好,不要做没有准备的战争,但是,我想说的是,生活中有很多的事情是不允许我们有准备的.遇到事情必须 ...

  4. iOS开发之静态库(六)—— 时空之争

    前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限 度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有i ...

  5. 爬虫神器xpath的用法(三)

    xpath的多线程爬虫 #encoding=utf-8 ''' pool = Pool(4) cpu的核数为4核 results = pool.map(爬取函数,网址列表) ''' from mult ...

  6. FreeSwitch安装配置记录

    安装FreeSwitch 主要命令如下: git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.gitcd freeswitch/. ...

  7. JVM常见的七种垃圾收集器的简单比较

    1.Serial收集器曾经是虚拟机新生代收集的唯一选择,是一个单线程的收集器,在进行收集垃圾时,必须stop the world,它是虚拟机运行在Client模式下的默认新生代收集器. 2.Seria ...

  8. [转] 配置Log4j

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  9. ELK——Elasticsearch 搭建集群经验

    本文内容 背景 ES集群中第一个master节点 ES slave节点 本文总结 Elasticsearch(以下简称ES)搭建集群的经验.以 Elasticsearch-rtf-2.2.1 版本为例 ...

  10. PayPal 高级工程总监:读完这 100 篇文献,就能成大数据高手

    原文地址 开源(Open Source)对大数据影响,有二:一方面,在大数据技术变革之路上,开源在众人之力和众人之智推动下,摧枯拉朽,吐故纳新,扮演着非常重要的推动作用:另一方面,开源也给大数据技术构 ...