一种flex客户端支持海量数据长时计算的方法
技术领域
本发明涉及一种海量数据长时计算的方法,尤其是一种flex客户端支持海量数据长时计算的方法。
背景技术
Flex是一个免费、高效的开源框架,用于构建对表现力要求极高、跨浏览器和操作系统的富客户端Web应用程序。使用Flex框架构建Flex应用程序时,Flex框架可以通过智能编码、交互式遍历调试以及可视化设计用户界面布局来简化应用程序的界面开发、设计难度,加快基于Flex项目的开发进度,且利用AdobeAIR,Flex应用程序还可以访问本地数据和系统的资源。与jsp、asp等技术相比,Flex的优势:Flex与Flash:可以让普通程序员开发制作Flash;丰富的界面渲染、交互能力,有极强的界面表现能力;RIA富客户端应用,解决了异步调用,界面无刷新,浏览器兼容性等多项难题;是流媒体技术支持最好的应用;跨平台能力强,能够在Linux、Window、Android等各种操作系统上运行;能够实现各种底层应用需求,比如操作、查看摄像头,查看摄像头实时视频等。
基于Flex开发的富客户端Web应用具有如此多优点,因此基于Flex技术的应用开发在国内被广泛研究,甄海涛等发表了《基于Flex的城市给排水管理平台设计与实现》(自动化技术与应用,2014)、潘立武等发表了《基于Flex和REST的WebGIS防汛信息管理系统》(水力发电,2017)、刘红敏等发表了《基于Flex的企业创新方法服务系统的设计与实现》(计算机工程与设计,2014)、张永华等发表了《基于Flex与AnyMap技术的气象灾害应急响应系统》(气象科技,2015)、邓超等发表了《基于Flex的市级国土资源综合监管平台设计与实现》(测绘工程,2016)、韩冬等发表了《Flex与GIS结合的水资源信息管理系统实现》(测绘科学,2014)、黄冬梅等发表了《基于Flex和WebGIS的风暴潮辅助决策系统》(计算机应用与软件,2014)、何贞铭等发表的《基于Flex的WebGIS客户端及其应用》(地理空间信息,2014)等。
ActionScript 3.0是Flex技术的重要组成部分,是一种强大的面向对象编程语言。设计ActionScript 3.0的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序已经成为Web体验的重要部分。Flex的基础是ActionScript 3.0,ActionScript 3.0运行环境是单线程事件驱动,Flex的一个事件从开始执行到结束,即使在这个事件中派遣了多个子事件执行一个逻辑处理单元,事件中的代码也是按照事件派遣顺序串行执行,当一个逻辑处理单元执行复杂任务,计算数据量大时,整个逻辑处理单元的执行也将会花费较长时间。在Flex中,一个事件处理业务的时间有时长限制,当一个事件处理的时间长度超过这个限制时,程序就出现超时提示,抛出超时异常,结束程序的运行,因此,基于Flex开发的富客户端Web应用程序,目前是不支持大数据量的复杂应用计算。
发明内容
本发明要解决的技术问题是现有的基于Flex开发的富客户端Web应用程序是不支持大数据量的复杂应用计算的。
为了解决上述技术问题,本发明提供了一种flex客户端支持海量数据长时计算的方法,包括如下步骤:
步骤1,由客户端向服务器发送查询请求,服务端对接收的查询请求进行解析,构建用于查询数据的查询语句,并将查询语句提交至数据库;
步骤2,数据库根据查询语句返回满足条件的查询结果数据至服务端;
步骤3,服务端构建用于返回客户端的不同数据区,并对数据库返回的查询结果数据进行组织获得不同数据区的分区数据,再将组织好的不同数据区的分区数据返回至客户端;
步骤4,客户端接收到返回的分区数据后创建一个控制单元,同时把服务端的不同数据区的分区数据存储在客户端的不同内存块中;
步骤5,客户端通过控制单元启动一个定时器线程,并把服务端返回的分区数据通过各个内存块传入定时器线程;
步骤6,客户端通过控制单元开辟一块寄存单元,分析计算数据依赖的对象,把各个对象与各个内存块关联,寄存单元中以计算数据依赖的对象为各个行头,以分区数据在内存块中的数据位置为各个行值;
步骤7,在定时器线程中声明一个定时器数据计算时长变量,并赋初始值为0,在定时器中更新与判断这个定时器数据计算时长变量,同时声明一个初始值为0的数据读取计数器,定时器线程每次从内存块中读取数据时,数据读取计数器的值加1;
步骤8,利用内存块中读取的数据计算VALUE值,当数据读取计数器大于等于定时器线程的阈值参数时,数据读取计数器重置为初始值0,同时更新定时器数据计算时长变量的值,定时器数据计算时长变量的值为定时器中开始计算数据的时间到当前更新的时间长度,当数据读取计数器的值小于定时器线程中设定的阈值参数时,数据读取计数器的值加1;
步骤9,循环执行步骤8,直到定时器数据计算时长变量大于定时器最大执行时间参数时停止,更新寄存单元的当前行值为当前计算的VALUE值,再通知控制单元结束当前定时器线程,控制单元接收到当前定时器线程结束通知后,重新启动一个新的定时器线程,并把各个内存块、寄存单元传给新的定时器线程,新的定时器线程读取寄存单元中存储的内存块中当前使用的数据位置,根据当前行位置从内存块中读取数据,若内存块中已无数据,则得到最终的VALUE值,否则返回步骤8。
进一步地,步骤5中,客户端通过控制单元启动一个定时器线程时,需要对启动的定时器进行配置,设置定时器线程的最大执行时间参数,通过最大执行时间参数来控制定时器线程的最大执行时间。
进一步地,步骤7中,声明一个数据读取计数器时,需要对数据读取计数器进行配置,设置数据读取计数器的阈值参数,通过阈值参数与定时器线程中数据计数器的比较来控制定时器线程中数据计算时长变量的判断与更新。
本发明的有益效果在于:通过在数据从服务端返回到客户端时,把返回的数据存储在不同的内存块中,并创建一个控制单元,通过这个控制单元创建持续计算数据的定时器线程,并把数据、寄存单元传给定时器线程;通过构建的寄存单元,把计算数据依赖的对象与保存数据的内存块中当前用于计算的数据所在的位置保存在寄存单元中;定时器线程结束后,新创建的定时器线程读取寄存单元中存储的内存块中当前使用的数据位置,根据当前的数据位置,在已结束的定时器线程计算的基础上继续计算数据;通过控制单元、寄存单元把一个完整的数据计算过程划分为多个持续的、较小的计算过程,从而使基于Flex的富Web应用程序的客户端具有了支持海量数据、长时计算的能力。
附图说明
图1为本发明的方法流程图;
图2为本发明的寄存单元构成示意图;
图3为本发明的计算对象与寄存单元示意图。
具体实施方式
通过如下实例的实现过程,阐述本发明的实施步骤。
实施例:现有多张复杂、大数据量的表T1,T2,T3,每张表包含多个字段,客户端按表1显示。
表1报表展示界面
表1中,VALUE根据公式(1)计算得到:
如图1所示,本发明的flex客户端支持海量数据长时计算的方法,具体实现步骤为:
初始化步骤,设置可配置的控制定时器线程中数据计数器的阈值参数P_C_DURATION,通过阈值参数P_C_DURATION来控制定时器线程中数据计算时长变量的判断与更新;设置可配置的定时器线程的最大执行时间参数P_T_EXECUTE_TIME_LENGTH,通过最大执行时间参数P_T_EXECUTE_TIME_LENGTH控制定时器线程的最大执行时间;
步骤1,客户端组织请求条件,把客户端请求发送到服务端;服务端解析请求,构建查询数据的查询语句;服务端把查询语句提交到数据库服务;
步骤2,数据库服务返回满足条件的数据到服务端;
步骤3,服务端对数据库服务返回的数据按照表T1、T2和T3进行组织,构建返回客户端的不同数据区D1、D2和D3,其中表T1对应的数据放在D1中、表T2对应的数据放在D2中,表T3对应的数据放在D3中;服务端把组织好的数据返回到客户端;
步骤4,客户端接收到返回数据后,创建一个控制单元,同时把对应服务端的D1、D2、D3数据区的数据存储在客户端的M1、M2和M3内存块中;
步骤5,通过控制单元,启动一个定时器线程,并把M1、M2和M3内存块传入定时器线程;
步骤6,控制单元开辟一块寄存单元M,如图2所示,分析公式(1),得到计算数据依赖的对象T1.F1、T2.F1、T2.F2、T3.F3,把T1.F1、T2.F1、T2.F2、T3.F3分别与M1、M2、M3关联,构建二维数组的寄存单元M,关联关系如图3所示,以T1.F1、T2.F1、T2.F2、T3.F3为行头,数据计算过程中,更新寄存单元M中T1.F1、T2.F1、T2.F2、T3.F3分别对应的行值,该行值为当前从M1、M2、M3中读取的数据在内存块中的位置;
步骤7,在定时器线程中声明一个定时器数据计算时长变量ComputeDuration,并赋初始值为0,在定时器中更新与判断这个数据计算时长变量ComputeDuration,同时声明一个初始值为0的数据读取计数器ReadCount,定时器线程每次从M1、M2、M3读数据计算VALUE值时,ReadCount增加1;
步骤8,根据公式(1),从M1、M2、M3中读取数据,计算VALUE,当ReadCount大于等于参数P_C_DURATION时,ReadCount重置为初始值0,同时更新计算时长变量ComputeDuration的值,ComputeDuration的值为定时器线程中开始计算数据的时间到当前更新ComputeDuration值的时间长度,以S为单位,当ReadCount小于参数P_C_DURATION时,ReadCount加1;
步骤9,循环步骤8,当变量ComputeDuration大于P_T_EXECUTE_TIME_LENGTH时,更新图3中寄存单元M的当前行的值为公式(1)的当前VALUE值,同时通知控制单元,结束当前定时器线程,控制单元接收到当前定时器线程结束通知后,重新启动一个新的定时器线程,并把M1、M2、M3以及寄存单元M传给新的定时器线程,新的定时器线程读取寄存单元M中的当前行,再根据当前行从M1、M2、M3内存块中读取数据,再利用公式(1)继续计算VALUE;
步骤10,重复步骤8和9,直到M1、M2、M3中的数据读取结束,得到最终的VALUE数据。
本发明通过控制单元和寄存单元把一个完整的数据计算过程划分为多个持续的、较小的计算过程,从而使基于Flex的富Web应用程序的客户端具备了支持海量数据、长时计算的能力。