CN113761041A - 一种数据导出方法、系统、装置以及电子设备 - Google Patents
一种数据导出方法、系统、装置以及电子设备 Download PDFInfo
- Publication number
- CN113761041A CN113761041A CN202110837676.6A CN202110837676A CN113761041A CN 113761041 A CN113761041 A CN 113761041A CN 202110837676 A CN202110837676 A CN 202110837676A CN 113761041 A CN113761041 A CN 113761041A
- Authority
- CN
- China
- Prior art keywords
- data
- result set
- client
- data result
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000012545 processing Methods 0.000 claims abstract description 20
- 230000008569 process Effects 0.000 claims description 8
- 238000005538 encapsulation Methods 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 238000012795 verification Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种数据导出方法、系统、装置以及电子设备,所述数据导出方法包括:接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;将所述数据导出请求封装为声明对象;将所述声明对象发送到服务端;接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;将所述数据结果集写入临时文件中;将临时文件转换格式,得到数据导出结果。该数据导出方法可以解决导出大批量数据时对系统造成的性能下降,甚至宕机的问题。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种数据导出方法、系统、装置以及电子设备。
背景技术
随着企业级信息化系统建设的不断发展,大数据已经成为许多企业的重要信息资源,越来越多的企业关注的重点从收集、存储数据逐渐向分析数据、发掘数据价值转变,面对多维度的大数据信息,大批量结构化数据的导出逐渐成为信息系统的重要功能之一。
目前业内常见的数据导出方式是基于Java EE架构的信息系统,该种方式通过将数据分批,分页读取数据,再写入存储文件中,这种方式在响应十万级以内中、小规模的数据导出处理请求时,通常具有较好的效果。然而,随着数据量的不断增加达到百万级甚至更高时,这种处理方法会导致Java虚拟机内存占用快速增加、性能急剧下降,直至导致Java虚拟机的宕机,危害到整个应用系统。
发明内容
有鉴于此,本公开的目的在于提出一种数据导出方法、系统、装置以及电子设备。
基于上述目的,本公开提供了一种数据导出方法,该方法应用于客户端,包括:
接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;
将所述数据导出请求封装为声明对象;
将所述声明对象发送到服务端;
接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;
将所述数据结果集写入临时文件中;
将临时文件转换格式,得到数据导出结果。
可选的,将所述数据结果集存储至缓冲区并进行处理,包括:
以字节为单位或者以多个包组成完整的结构化数据形式,读取所述数据结果集;
使用遍历数组方法,处理接收到的所述数据结果集中的每一条数据。
可选的,将所述数据结果集写入临时文件中,包括:
采用滑动窗口将所述数据结果集写入临时文件中;其中,所述滑动窗口设置有数据量阈值,当所述滑动窗口中的数据达到所述数据量阈值时,将所述滑动窗口内数据保存至磁盘中的临时文件中,释放所述滑动窗口内数据所占用的客户端内存空间,直至所有数据结果集中的数据全部写入磁盘中的临时文件。
基于同一发明构思,本公开还提供了数据导出方法,该方法应用于服务端,包括:
接收声明对象;其中,所述声明对象是由客户端将数据导出请求进行封装得到的;
根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集;
使用stream模式将所述数据结果集发送至客户端的缓冲区。
可选的,根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集,之后还包括:
根据所述数据导出请求的声明参数,判断是否使用stream模式;响应于确定不使用stream模式,使用分页模式将所述数据结果集发送至客户端。
可选的,所述使用stream模式将数据结果集发送至客户端,包括:
在Stream模式下,将所述数据结果集中的数据转换为具体行的结构化数据发送至所述客户端缓冲区。
基于同一发明构思,本公开还提供了一种可实现数据导出的客户端,包括:
第一接收模块,被配置为接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;
封装模块,被配置为将所述数据导出请求封装为声明对象;
第一发送模块,被配置为将所述声明对象发送到服务端;
读取处理模块,被配置为接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;
编写模块,被配置为将所述数据结果集写入临时文件中;
第一输出模块,被配置为将临时文件转换格式,得到数据导出结果。
基于同一发明构思,本公开还提供了一种可实现数据导出的服务端,包括:
第二接收模块,被配置为接收声明对象;其中,所述声明对象是由客户端将数据导出请求进行封装得到的;
获取模块,被配置为根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集;
第二发送模块,被配置为使用stream模式将所述数据结果集发送至客户端。
基于同一发明构思,本公开还提供了一种数据导出系统,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,用于实现所述的数据导出方法。
基于同一发明构思,本公开还提供了一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述数据导出方法。
从上面所述可以看出,本公开提供的数据导出方法,客户端将数据导出请求封装为声明对象,发送到服务端,由服务端调取存储引擎中与数据导出请求对应的数据结果集,使用stream模式将所述数据结果集发送至客户端,客户端将数据结果集采用滑动窗口将所述数据结果集写入临时文件,最后将临时文件转换为用户所需格式并发送给用户。本公开提供的数据导出方法,服务端将数据结果集存储到缓冲区处理后持续发送数据,避免多次连接、分页查询的开销,采用Stream方式处理数据,在并发情况下,客户端内存占用增长较小,内存占用趋势较平缓,另外,客户端采用Stream方式持续发送数据,避免IOPS飙升,引起应用系统性能下降,服务端采用临时件保存滑动窗口数据,降低由于数据量递增导致的内存占用增长,降低大数据量导出时对应用系统性能的影响。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例的数据导出方法的服务端与客户端交互图;
图2为本公开实施例的数据导出方法的客户端流程图
图3为本公开实施例的数据导出方法的服务端流程图
图4为本公开实施例的数据导出方法的单线样本数据导出耗时折线图;
图5为本公开实施例的数据导出方法的并发样本数据导出内存占用折线图;
图6为本公开实施例的数据导出方法的客户端装置图;
图7为本公开实施例的数据导出方法的服务端装置图;
图8为本公开实施例的数据导出方法的电子设备硬件结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本说公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
如背景技术部分所述,Java虚拟机是一种抽象化的计算机,可以在实际的计算机上仿真模拟各种计算机功能。宕机,指操作系统无法从一个严重系统错误中恢复过来,或系统硬件层面出问题,以致系统长时间无响应,而不得不重新启动计算机的现象。大批量结构化数据的导出会导致Java虚拟机内存占用快速增加、性能急剧下降,直至导致Java虚拟机的宕机,危害到整个应用系统。
综合上述考虑,本公开实施例提出一种数据导出方法,客户端将数据导出请求封装为声明对象,发送到服务端,由服务端调取存储引擎中与数据导出请求对应的数据结果集,使用stream模式将所述数据结果集发送至客户端,客户端将数据结果集采用滑动窗口将所述数据结果集写入临时文件,最后将临时文件转换为用户所需格式并发送给用户。本公开提供的数据导出方法,服务端将数据结果集存储到缓冲区处理后持续发送数据,避免多次连接、分页查询的开销,采用Stream方式处理数据,在并发情况下,客户端内存占用增长较小,内存占用趋势较平缓,另外,客户端采用Stream方式持续发送数据,避免IOPS飙升,引起应用系统性能下降,服务端采用临时件保存滑动窗口数据,降低由于数据量递增导致的内存占用增长,降低大数据量导出时对应用系统性能的影响。
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
参考图1,为本公开实施例的数据导出方法的客户端200与服务端300交互图,包括以下步骤:
步骤11,客户端200接收用户100的数据导出请求。。
在本公开实施例中,所述数据导出请求包括标准结构化数据库语句。步骤12,客户端200将所述数据导出请求封装为声明对象。
在具体实施中,客户端200是指JDBC客户端,JDBC客户端采用数据库连接技术,建立与数据库服务器连接的应用程序实例。数据导出请求是指由用户100发出的调用信息的指令,所述数据导出请求包括标准结构化数据库语句,所述数据导出请求用于匹配数据库中的大数据信息。
在具体实施中,客户端200接收到用户100发出的数据导出请求后,需要对数据导出请求进行进一步封装,其中,封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
在本公开实施例中,客户端200将数据导出请求封装为声明对象,声明对象具体是指Statemen类中根据数据导出请求实例化后的一个类,Statement类是Java执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的标准结构化数据库语句。将Statement的FetchSize属性设置为Integer.MIN_VALUE,ResultSetType属性设置为FORWARD_ONLY。以上两个属性分别对应为声明对象的整形类型最小范围、结果集的游标只能向下滚动,接收数据对象类型为Cursor<T>,当Statement设置以上属性时,采用的是Stream数据接收方式,每次只从服务器300接收部份数据,直到所有数据处理完毕,不会发生Java虚拟机内存不足的情况。泛型T表示任意Java DTO类,可根据实际需要,在实施过程中替换为不同的DTO类型。
步骤13,客户端200将所述声明对象发送到服务端300。
在具体实施中,客户端200将用户100发出的数据导出请求封装成声明对象后,将声明对象发送到服务端300,以便获取与所述声明对象对应的数据结果集。
步骤14,服务端300根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集。
在具体实施中,服务端300是指Database服务端,Database服务端是提供结构化数据读写功能的MySQL服务器实例。
在具体实施中,MySQL中的数据用各种不同的技术存储在内存或者文件中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。
存储引擎根据不同的性能可以分为MyISAM存储引擎、InnoDB存储引擎、BDB存储引擎、Memory存储引擎、Merge存储引擎、Archive存储引擎、Federated存储引擎、Cluster/NDB存储引擎、CSV存储引擎和BlackHole存储引擎等。
数据结果集是指声明对象包含符合标准结构化数据库语句中条件的所有行集合。它嵌用一套get方法,这些get方法可以访问当前行中的不同列,提供了对这些行中数据的访问。数据结果集一般是一个表,其中有查询所返回的列标题及相应的值。
在本公开实施例中,由于需要使用行级锁,所以本公开实施例优选使用InnoDB存储引擎,InnoDB存储引擎是5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定。
在本公开实施例中,Database服务端根据接收到的所述声明对象,获取InnoDB存储引擎中与所述声明对象对应的符合标准结构化数据库语句中条件的所有数据结果集。
步骤15,服务端300使用stream模式将所述数据结果集发送到客户端200。
在本公开实施例中,服务端300使用Stream模式,将数据结果集逐行使用CursorResult Byte[]发送至客户端200的Stream Buffer中,也就是客户端200的Java缓冲区中。如果是分页查询模式,则按检索条件从存储引擎读取结果集,将结果集一次发送至客户端200的Java缓冲区中。
步骤16,客户端200接收服务端300发送的数据结果集。
步骤17,将所述数据结果集存储至缓冲区并进行处理。
在本公开实施例中,客户端200接收数据结果集,从Java缓冲区每次读取一行数据进行处理。需要说明的是,客户端200是以包为单位从网络缓冲区读取数据,有可能会读取多个包组装为一条完整的结构化数据,拷贝至Java缓冲区中。
客户端200使用一个Cursor<T>对象的forEach方法,持续处理接收到的每一条数据,foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组,foreach语句用于循环访问集合以获取所需信息。
步骤18,客户端200将所述数据结果集写入临时文件中。
在具体实施中,临时文件保存在磁盘中,不会占用客户端内存,将数据写入临时文件中,可以释放数据所占用的客户端内存,达到以磁盘空间换取客户端内存空间的效果。
在本公布实施例中,客户端应用程序以行为单位,将Java缓冲区中的数据逐行写入临时文件中。随着数据量的递增,客户端应用程序内存空间仍然可能呈现近似线性增长的现象,此时可以在创建SXSSFWorkBook对象时,指定数据集滑动窗口属性rowAccessWindowSize,设置滑动窗口数据量阈值,当窗口中数据条数达到此阈值时,将数据保存至磁盘临时文件,此后释放已保存至临时文件的数据变量所占用的内存空间,循环处理直至所有数据处理完毕,整个数据导出流程结束。
步骤19,将临时文件转换格式。。
在本公开实施例中,客户端200将临时文件转换成XLSX形式文件。
步骤20,客户端输出数据导出结果。
在本公开实施例中,客户端将临时文件转换成XLSX形式文件作为数据导出结果,所述数据导出结果存储在客户端200,可以随时供用户100通过各种应用程序查看。
参考图2,当应用于客户端时,本公开实施例的数据导出方法,可以包括以下步骤:
S201,客户端接收数据导出请求。
S202,客户端将所述数据导出请求封装为声明对象。
S203,客户端将所述声明对象发送到服务端。
S204,客户端接收服务端发送的数据结果集。
S205,客户端将所述数据结果集写入临时文件中。
S206,客户端将临时文件转换格式并发送至用户。
参考图3,当应用于服务端时,本公开实施例的数据导出方法,可以包括以下步骤:
S301,服务端接收声明对象。
S202,服务端根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集。
S203,服务端使用stream模式将所述数据结果集发送至客户端。
在本公开的一个实施例中,采用了多组数据样本,在相同条件下多次验证,样本验证过程说明如下:
验证环境如下:
对于JDBC客户端,采用中央处理器全称为Intel(R)Core(TM)i7-9750HCPU@2.60GHz,其类型为Desktop,插槽为FCBGA1440,时钟频率为2.6GHz,睿频为4.5GHz,核心数量为32(2logical cores per physical),典型TDP为45W,JDBC客户端内存为32G,JDK(JavaDevelopment Kit)是1.8版本,JVM(Java虚拟机)的最小堆内存为512m,最大堆内存为512m。
对于Database服务端,采用中央处理器全称为Intel(R)Xeon(R)CPU E5-2630v4@2.20GHz,其类型为其类型为Desktop,插槽为FCLGA2011-3,时钟频率为2.2GHz,睿频为3.1GHz,核心数量为32(2logical cores per physical),典型TDP为85W,JDBC客户端内存为8G,MySQL(关系型数据库管理系统)是5.7版本。
在本公开实施例中,样本数据如下:
其中,左关联查询是指左向外连接。
左向外联接的数据结果集包括左向外联接子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。调用Employee与Education两种不同表的目的是模拟实际业务场景中多表关联的情况。
在本公开实施例中,验证结果如下:
单线程耗时:
由以上数据可以看出,使用分页导出方式时,随着数据量的递增,导出耗时呈近似线性增长状态,使用全量导出方式时,当数据量达到百万级别时,全量导出方式失效,使用Stream导出方式时,随着数据量的递增,导出耗时短,增长平缓,对比于分页模式,耗时有明显缩短。
如图4所示,为单线样本数据导出耗时折线图。
其中,曲线1为分页方式,曲线2为Stream方式,横坐标为导出记录数,单位为行,纵坐标为导出平均耗时,单位为秒,由图中曲线走势可以看出,当时用分页方式导出数据时,导出平均耗时逐渐递增,且增幅明显,当使用Stream导出方式导出数据时,导出耗时相对平缓。
并发(5线程)导出耗时:
由以上数据可以看出,使用分页导出方式时,随着数据量的递增,5条线程的导出耗时呈近似线性增长状态,使用Stream导出方式时,随着数据量的递增,5条线程的导出耗时增长平缓,当数据量达到百万级别时,对比于分页模式,耗时有明显缩短。
如图5所示,为并发样本数据导出内存占用折线图。
其中,曲线3为分页方式,曲线4为Stream方式,横坐标为导出记录数,单位为行,纵坐标为平均内存占用量,由图中曲线走势可以看出,当时用分页方式导出数据时,平均内存占用量逐渐递增,且增幅明显,当使用Stream导出方式导出数据时,平均内存占用量相对平缓,整个过程占用内存空间少。
在本公开实施例中,采用Stream方式在导出大批量数据时具有明显的耗时短、内存占用低、并发处理能力强的优势,能够有效的提升大批量数据导出的效率。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,本公开实施例的方法可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了对应的数据导出装置。
参考图6,所述数据导出装置,包括客户端装置:
S301第一接收模块,被配置为接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;
S302封装模块,被配置为将所述数据导出请求封装为声明对象;
S303第一发送模块,被配置为将所述声明对象发送到服务端;
S304读取处理模块,被配置为接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;
S305编写模块,被配置为将所述数据结果集写入临时文件中;
S306第一输出模块,被配置为将临时文件转换格式并发送至用户。
参考图7,所述数据导出装置,还包括服务端装置:
S401第二接收模块,被配置为接收声明对象;其中,所述声明对象是由客户端将数据导出请求进行封装得到的;
S402获取模块,被配置为根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集;
S404第二发送模块,被配置为使用stream模式将所述数据结果集发送至客户端。
所述服务端还包括判断模块,被配置为判断数据结果集的读取模式;
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图8示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种数据导出的方法,应用于客户端,其特征在于,包括:
接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;
将所述数据导出请求封装为声明对象;
将所述声明对象发送到服务端;
接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;
将所述数据结果集写入临时文件中;
将临时文件转换格式,得到数据导出结果。
2.根据权利要求1所述的数据导出的方法,其特征在于,将所述数据结果集存储至缓冲区并进行处理,具体包括:
以字节为单位或者以多个包组成完整的结构化数据形式,读取所述数据结果集;
使用遍历数组方法,处理接收到的所述数据结果集中的每一条数据。
3.根据权利要求1所述的数据导出的方法,其特征在于,将所述数据结果集写入临时文件中,具体包括:
采用滑动窗口将所述数据结果集写入临时文件中;其中,所述滑动窗口设置有数据量阈值,当所述滑动窗口中的数据达到所述数据量阈值时,将所述滑动窗口内数据保存至磁盘中的临时文件中,释放所述滑动窗口内数据所占用的客户端内存空间,直至所有数据结果集中的数据全部写入磁盘中的临时文件。
4.一种数据导出的方法,应用于服务端,其特征在于,包括:
接收声明对象;其中,所述声明对象是由客户端将数据导出请求进行封装得到的;
根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集;
使用stream模式将所述数据结果集发送至客户端。
5.根据权利要求4所述的数据导出的方法,其特征在于,根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集,之后还包括:
根据所述数据导出请求的声明参数,判断是否使用stream模式;响应于确定不使用stream模式,使用分页模式将所述数据结果集发送至客户端的缓冲区。
6.根据权利要求4所述的一种数据导出的方法,其特征在于,所述使用stream模式将数据结果集发送至客户端,具体包括:
在Stream模式下,将所述数据结果集中的数据转换为具体行的结构化数据发送至所述客户端缓冲区。
7.一种客户端,其特征在于,包括:
第一接收模块,被配置为接收数据导出请求;其中,所述数据导出请求包括标准结构化数据库语句;
封装模块,被配置为将所述数据导出请求封装为声明对象;
第一发送模块,被配置为将所述声明对象发送到服务端;
读取处理模块,被配置为接收服务端发送的数据结果集,将所述数据结果集存储至缓冲区并进行处理;其中,所述数据结果集是由服务端根据接收到所述声明对象后从存储引擎中获取后通过stream模式发送的;
编写模块,被配置为将所述数据结果集写入临时文件中;
第一输出模块,被配置为将临时文件转换格式,得到数据导出结果。
8.一种服务端,其特征在于,包括:
第二接收模块,被配置为接收声明对象;其中,所述声明对象是由客户端将数据导出请求进行封装得到的;
获取模块,被配置为根据接收到的所述声明对象,获取存储引擎中与所述声明对象对应的数据结果集;
第二发送模块,被配置为使用stream模式将所述数据结果集发送至客户端。
9.一种数据导出系统,包括:如权利要求7所述的客户端,以及如权利要求8所述的服务端。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110837676.6A CN113761041A (zh) | 2021-07-23 | 2021-07-23 | 一种数据导出方法、系统、装置以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110837676.6A CN113761041A (zh) | 2021-07-23 | 2021-07-23 | 一种数据导出方法、系统、装置以及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113761041A true CN113761041A (zh) | 2021-12-07 |
Family
ID=78787903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110837676.6A Pending CN113761041A (zh) | 2021-07-23 | 2021-07-23 | 一种数据导出方法、系统、装置以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113761041A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628890A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种数据导出方法及系统 |
CN110543495A (zh) * | 2019-08-29 | 2019-12-06 | 北京东方国信科技股份有限公司 | 游标遍历存储方法及装置 |
CN110555068A (zh) * | 2018-05-14 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 数据导出方法和装置 |
CN112182085A (zh) * | 2020-09-28 | 2021-01-05 | 中国建设银行股份有限公司 | 数据导出方法、装置、设备及存储介质 |
CN112311774A (zh) * | 2020-10-16 | 2021-02-02 | 北京金山云网络技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
-
2021
- 2021-07-23 CN CN202110837676.6A patent/CN113761041A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628890A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种数据导出方法及系统 |
CN110555068A (zh) * | 2018-05-14 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 数据导出方法和装置 |
CN110543495A (zh) * | 2019-08-29 | 2019-12-06 | 北京东方国信科技股份有限公司 | 游标遍历存储方法及装置 |
CN112182085A (zh) * | 2020-09-28 | 2021-01-05 | 中国建设银行股份有限公司 | 数据导出方法、装置、设备及存储介质 |
CN112311774A (zh) * | 2020-10-16 | 2021-02-02 | 北京金山云网络技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
XIEYU_ZY: "MySQL JDBC StreamResult通信原理浅析", Retrieved from the Internet <URL:《https://blog.csdn.net/xieyuooo/article/details/83109971/》> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020086187A1 (en) | Data processing method, apparatus, and device | |
CN106648569B (zh) | 目标序列化实现方法和装置 | |
CN114356851B (zh) | 数据文件的存储方法、装置、电子设备及存储介质 | |
CN110837531A (zh) | 数据源读写的分离方法、装置及计算机可读存储介质 | |
CN113569508A (zh) | 基于id进行数据索引与访问的数据库模型构建方法及设备 | |
CN111209736A (zh) | 文本文件解析方法、装置、计算机设备及存储介质 | |
CN110888972A (zh) | 一种基于Spark Streaming的敏感内容识别方法及装置 | |
CN110704404A (zh) | 一种数据质量校验方法、装置、系统 | |
CN114217987A (zh) | 数据共享方法、设备、电子设备及存储介质 | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 | |
CA3203549A1 (en) | Unified verification method, device, equipment and storage medium | |
CN116628773A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113761041A (zh) | 一种数据导出方法、系统、装置以及电子设备 | |
CN116738954A (zh) | 报表导出方法、报表模板的配置方法、装置、计算机设备 | |
CN116225450A (zh) | 文本转换方法和装置,计算设备和可读存储介质 | |
CN112463785B (zh) | 一种数据质量监控方法、装置、电子设备及存储介质 | |
US20070174322A1 (en) | Method for building data encapsulation layers for highly variable schema | |
CN114968917A (zh) | 一种文件数据快速导入方法及装置 | |
CN112395276A (zh) | 一种数据比对方法及相关设备 | |
CN112379915B (zh) | 一种源代码处理方法及装置 | |
CN111737109A (zh) | 一种集群文件系统测试方法及装置 | |
CN113268967B (zh) | 一种用于处理数据信息的方法与设备 | |
CN110134691B (zh) | 数据校验方法、装置、设备和介质 | |
CN112015751A (zh) | 数据查询方法及相关设备 | |
CN112488687A (zh) | 一种支付方式配置方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |