CN116775699A - 一种批流一体化数据处理系统及方法 - Google Patents
一种批流一体化数据处理系统及方法 Download PDFInfo
- Publication number
- CN116775699A CN116775699A CN202210237132.0A CN202210237132A CN116775699A CN 116775699 A CN116775699 A CN 116775699A CN 202210237132 A CN202210237132 A CN 202210237132A CN 116775699 A CN116775699 A CN 116775699A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- calculation
- pax
- batch
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 120
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000004364 calculation method Methods 0.000 claims abstract description 139
- 238000003860 storage Methods 0.000 claims abstract description 76
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000006243 chemical reaction Methods 0.000 claims abstract description 8
- 238000007726 management method Methods 0.000 claims description 40
- 238000004590 computer program Methods 0.000 claims description 18
- 238000003672 processing method Methods 0.000 claims description 13
- 238000012217 deletion Methods 0.000 claims description 9
- 230000037430 deletion Effects 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 238000013500 data storage Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 238000005457 optimization Methods 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 230000005055 memory storage Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 230000008520 organization Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 3
- 238000005111 flow chemistry technique Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- CCEKAJIANROZEO-UHFFFAOYSA-N sulfluramid Chemical group CCNS(=O)(=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F CCEKAJIANROZEO-UHFFFAOYSA-N 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Fuzzy Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种批流一体化数据处理系统及方法,涉及数据处理技术领域;所述系统包括:内存抽象模块,用于根据数据计算模式对序列化后的内存数据进行内存管理;序列化与反序列化模块,用于进行数据对象和内存数据的相互转换;SQL代码生成模块,用于根据数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;算子模块,用于采用基于Pax存储结构的数据处理模式,执行向量式SQL执行代码,以对待处理内存数据进行数据处理。本申请能够有效兼顾流计算和批处理两种计算模式,保留了流处理的低延迟性能,并提供更高的批处理吞吐能力,同时优化了窗口计算的效率,提高了特定窗口统计场景的计算性能。
Description
技术领域
本申请涉及数据处理技术领域,具体涉及一种批流一体化数据处理系统、方法、电子设备及计算机程序产品。
背景技术
Flink为了低延迟采用了基于行的数据处理,所以其批处理的实现也是基于行的,基于行的问题是对CPU缓存不友好,CPU的高速缓存容易发生Cache Miss,导致CPU空转等待从内存加载数据,无法充分利用现代CPU的SIMD特性(全称Single Instruction MultipleData,单指令多数据流),一条指令只能处理一条数据,而基于列存则可以充分利用现代CPU的SIMD特性,加速计算。
现有的Flink实现方法存在以下问题:1)批流性能难以兼顾,列式执行引擎可以很好的提升统计计算的性能,但是一旦出现大量的分支跳转指令的场景,则计算效率会急剧下降,则难以保证低延迟;使用行式执行引擎,则难以利用CPU的SIMD特性提高计算效率;2)流计算中特定窗口统计场景性能差;在流计算中,处理的数据量的大小取决于窗口的长度,在较大的数据规模下,就可能出现无法在规定时间内计算完毕,导致数据持续积压,数据处理延迟持续增加。
发明内容
本申请实施例提供一种批流一体化数据处理系统、方法、电子设备及计算机程序产品,用以解决现有技术中批流性能难以兼顾以及特定窗口统计场景性能差的问题。
第一方面,本申请实施例提供一种批流一体化数据处理系统,包括:
内存抽象模块,用于在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
序列化与反序列化模块,用于进行数据对象和内存数据的相互转换;
SQL代码生成模块,用于根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
算子模块,用于采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
在一个实施例中,所述算子模块包括多个算子单元,每一所述算子单元用于:获取输入数据流,基于所述向量式SQL执行代码从所述数据流的数据页中取出数据记录,在对多条数据记录循环批量处理之后,写入到新的数据页中,继而输出以数据页为单位的数据流。
在一个实施例中,所述内存抽象模块,具体还用于:根据当前的数据计算模式,选取相应的数据页存储参数对所述内存数据进行内存管理;其中,所述数据页存储参数包括数据记录条数、最大等待时间和数据页默认最大内存空间。
在一个实施例中,所述内存抽象模块,具体还用于:
在流计算模式下,根据当前数据积压情况对所述内存数据的数据记录条数进行实时自适应调整,在所述数据页默认最大内存空间的约束下,基于所述最大等待时间和调整后的数据记录条数对所述内存数据进行内存管理;
在批处理模式下,基于所述数据页默认最大内存空间对所述内存数据进行内存管理。
在一个实施例中,所述内存抽象模块包括数据插入管理单元、数据更新管理单元和数据删除管理单元,其中:
所述数据插入管理单元,用于在数据插入时,生成新数据页并根据数据属性值的长度对所述新数据页进行子数据页分配,继而将待插入数据记录的属性分别复制至不同子数据页中;
所述数据更新管理单元,用于在数据更新时,若根据待更新数据记录需要更新的属性值在不同子数据页里面的偏移量判断超出子数据页可用空间,则向该子数据页的相邻子数据页申请空间,若无法从相邻子数据页申请空间,则重新申请新数据页,并将待更新数据记录移到新申请的数据页中,同时将旧数据页中被更新的数据记录标记为删除;
所述数据删除管理单元,用于在数据删除时,在数据页的预设位图中对待删除数据进行标记,当标记的待删除数据记录超过预设阈值时,则对标记的待删除数据记录进行删除,并生成新的数据页进行数据存储。
在一个实施例中,所述序列化与反序列化模块包括第一序列化与反序列化单元和第二序列化与反序列化单元,其中:
所述第一序列化与反序列化单元,用于在流计算模式下,将接收到的事件数据对象进行序列化并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在流计算模式下,每一子数据页对应存储一条事件数据对象的序列;
所述第二序列化与反序列化单元,用于在批处理模式下,将接收到的多条事件数据对象按列进行序列化,并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在批处理模式下,每一子数据页对应存储多条事件数据对象的序列。
在一个实施例中,所述SQL代码生成模块,具体用于:在根据SQL算子的参数进行初始化后申请计算所需资源;生成计算过程中所需的临时变量,并针对计算中所涉及的列提取Pax存储结构的数据,采用循环计算的方式遍历计算生成对应的数据结构的变量;将计算结果写回至Pax存储结构的内存数据中,并释放本次计算所申请的计算所需资源。
第二方面,本申请实施例提供一种批流一体化数据处理方法,包括:
利用内存抽象模块在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
利用序列化与反序列化模块进行数据对象和内存数据的相互转换;
利用SQL代码生成模块根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
利用算子模块采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
第三方面,本申请实施例提供一种电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述程序时实现第二方面所述的批流一体化数据处理方法的步骤。
第四方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现第二方面所述的批流一体化数据处理方法的步骤。
本申请实施例提供了一种批流一体化数据处理系统、方法、电子设备及计算机程序产品,该系统通过采用行列混合的Pax存储结构,支持列式计算充分利用了现代CPU的SIMD优化,从而能够有效兼顾流计算和批处理两种计算模式,保留了流处理的低延迟性能,并提供更高的批处理吞吐能力,同时优化了窗口计算的效率,提高了特定窗口统计场景的计算性能。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的批流一体化数据处理系统的结构示意图之一;
图2是本申请实施例提供的批流一体化数据处理系统的结构示意图之二;
图3是本申请实施例提供的NSM行存、Pax混合以及Pax缓存对比示意图;
图4是本申请实施例提供的Pax行列混合存储结构示意图;
图5是本申请实施例提供的改进的序列化/反序列化结构示意图;
图6是本申请实施例提供的Flink MemorySegment中数据布局对比示意图;
图7是本申请实施例提供的Flink数据处理模式对比示意图;
图8是本申请实施例提供的批流一体化数据处理方法的流程示意图;
图9是本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参照图1,本申请实施例提供一种批流一体化数据处理系统,包括:
内存抽象模块1,用于在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
序列化与反序列化模块2,用于进行数据对象和内存数据的相互转换;
SQL代码生成模块3,用于根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
算子模块4,用于采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
需要说明的是,本申请实施例以Flink为基础,基于Pax行列混合内存存储结构,将Flink改造为向量化执行的计算引擎,即本申请实施例提供的批流一体化数据处理系统,主要包括内存抽象模块1、序列化与反序列化模块2、SQL代码生成模块3和算子模块4。
本申请实施例提供的批流一体化数据处理系统,通过采用行列混合的Pax存储结构,支持列式计算充分利用了现代CPU的SIMD优化,从而能够有效兼顾流计算和批处理两种计算模式,保留了流处理的低延迟性能,并提供更高的批处理吞吐能力,同时优化了窗口计算的效率,提高了特定窗口统计场景的计算性能。
在一个实施例中,所述算子模块4包括多个算子单元,每一所述算子单元用于:获取输入数据流,基于所述向量式SQL执行代码从所述数据流的数据页中取出数据记录,在对多条数据记录循环批量处理之后,写入到新的数据页中,继而输出以数据页为单位的数据流。
在本申请实施例中,在算子模块4中具有多个算子单元,算子单元采用基于Pax存储结构的数据处理模式,与现有技术相比,从按条处理改进为按数据页进行处理,从而能够兼顾批流两种计算模式,进一步提高了数据处理系统的计算性能。
在一个实施例中,所述内存抽象模块1,具体还用于:根据当前的数据计算模式,选取相应的数据页存储参数对所述内存数据进行内存管理;其中,所述数据页存储参数包括数据记录条数、最大等待时间和数据页默认最大内存空间。
在本申请实施例中,在对内存数据进行管理时,具有数据记录条数、最大等待时间和数据页默认最大内存空间的参数,其中根据数据计算模式的不同(流计算模式和批处理模式),系统对上述存储策略的参数进行自适应调整。从而本申请实施例能够兼顾批流两种计算模式,进一步提高了数据处理系统的计算性能。
在一个实施例中,所述内存抽象模块1,具体还用于:
在流计算模式下,根据当前数据积压情况对所述内存数据的数据记录条数进行实时自适应调整,在所述数据页默认最大内存空间的约束下,基于所述最大等待时间和调整后的数据记录条数对所述内存数据进行内存管理;
在批处理模式下,基于所述数据页默认最大内存空间对所述内存数据进行内存管理。
在本申请实施例中,在流计算模式下,为了提高流计算的吞吐量,在流计算中也可以适当放宽数据页中保存的数据条数。而批处理模式下关注的是整体吞吐量,单个作业的总体执行时间最短,不需要关注每一条数据处理的延迟,需要尽可能保证数据最大吞吐,使用数据页默认最大内存空间作为数据页实际内存大小,向数据页持续写入数据,直到数据页写满为止。批处理模式下最大等待时间参数不生效,只有数据处理完毕之后,接收到数据输入完毕的消息之后,才会停止生成Pax数据页。
本申请实施例提供的批流一体化数据处理系统,通过根据批流计算模式的侧重点不同,自适应地调整预设参数进行数据的存取,从而在流计算模式中保持了低延迟和高吞吐,在批处理模式中提升了批处理的性能。
在一个实施例中,所述内存抽象模块1包括数据插入管理单元、数据更新管理单元和数据删除管理单元,其中:
所述数据插入管理单元,用于在数据插入时,生成新数据页并根据数据属性值的长度对所述新数据页进行子数据页分配,继而将待插入数据记录的属性分别复制至不同子数据页中;
所述数据更新管理单元,用于在数据更新时,若根据待更新数据记录需要更新的属性值在不同子数据页里面的偏移量判断超出子数据页可用空间,则向该子数据页的相邻子数据页申请空间,若无法从相邻子数据页申请空间,则重新申请新数据页,并将待更新数据记录移到新申请的数据页中,同时将旧数据页中被更新的数据记录标记为删除;
所述数据删除管理单元,用于在数据删除时,在数据页的预设位图中对待删除数据进行标记,当标记的待删除数据记录超过预设阈值时,则对标记的待删除数据记录进行删除,并生成新的数据页进行数据存储。
在本申请实施例中,通过上述的数据插入管理单元、数据更新管理单元和数据删除管理单元对改进后的Flink下的内存数据进行内存管理,从而支持Pax行列混合的内存结构,从而本申请实施例能够兼顾批流两种计算模式,进一步提高了数据处理系统的计算性能。
在一个实施例中,所述序列化与反序列化模块2包括第一序列化与反序列化单元和第二序列化与反序列化单元,其中:
所述第一序列化与反序列化单元,用于在流计算模式下,将接收到的事件数据对象进行序列化并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在流计算模式下,每一子数据页对应存储一条事件数据对象的序列;
所述第二序列化与反序列化单元,用于在批处理模式下,将接收到的多条事件数据对象按列进行序列化,并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在批处理模式下,每一子数据页对应存储多条事件数据对象的序列。
在本申请实施例中,第一序列化与反序列化单元适用于流处理的计算模型,事件到计算节点即进行处理,无需像批处理模式那样等待数据,在一个Pax数据页中积攒一批数据之后再进行处理,具有更低的数据处理延迟。第二序列化与反序列化单元适用于批处理计算模型,在该模式下:(1)可以批量处理数据,单个CPU指令可以处理多条数据,具体处理的数据条数,取决于CPU的指令集,(2)可以批量在网络中传输数据,相比流模式具备更好的数据吞吐量。
在一个实施例中,所述SQL代码生成模块3,具体用于:在根据SQL算子的参数进行初始化后申请计算所需资源;生成计算过程中所需的临时变量,并针对计算中所涉及的列提取Pax存储结构的数据,采用循环计算的方式遍历计算生成对应的数据结构的变量;将计算结果写回至Pax存储结构的内存数据中,并释放本次计算所申请的计算所需资源。
在本申请实施例中,通过改进SQL代码生成模块针对Pax行列混合内存结构进行代码生成,在计算过程中CPU高速缓存一个数据页,计算过程中无需从内存中加载数据,可以极大的提升Flink的计算效率。
基于上述方案,为便于更好的理解本申请实施例提供的批流一体化数据处理系统,以下进行具体说明:
需要说明的是,在大数据计算领域主要有批处理和流计算2种计算模式,批处理面向T+1的场景,实现OLAP(联机分析处理)离线分析,核心点是吞吐量和总体计算效率;流计算面向T+0的场景,实现实时业务处理和增量统计分析,核心点是低延迟和吞吐量。以上两者的重点略有不同,导致其计算引擎的实现方式存在差异。
大数据计算引擎在其内部实现上,有基于行的计算引擎、基于列的计算引擎2种:NSM就是通常说的行存,对于现阶段很多偏重OLTP的数据,譬如MySQL等,都采用的这种方式存储的数据。NSM会将数据记录依次在磁盘数据页里面存放,每个数据页的末尾会存放数据记录的偏移量(offset),便于快速的定位到实际的数据记录。如果每次需要得到一行数据记录,或者遍历读取所有的数据记录,这种格式非常的高效。但如果在查询时,仅仅是要拿到数据记录里面的一列数据,譬如select name from R where age<40,那么对于每次age的遍历,除了会将无用的其他数据一起读入,每次读取数据记录,都可能会引起CPU的CacheMiss。行式一般采用Volcano计算模型,例如Flink、Spark(默认执行模式)。在流计算的技术场景中,一般采用基于行的执行模式,即来一条事件处理一条,保证数据处理的端到端延迟最低的。
DSM则是通常的说的列存,几乎所有的OLAP系统,都采用的这种方式来存储的底层数据。不同于NSM,DSM将数据按照不同的属性分别存放到不同的数据页里面。对于上面只需要单独根据某一个属性进行查询的情况,会直接读出数据页,遍历处理,这个对CPU缓存是非常高效友好的。但是,如果一个查询会涉及到多个不同的属性,那么就可能需要多次IO来组合最终的数据记录。同时,对于写入,DSM因为会将不同的据记录对应的数据写到不同的数据页,也会造成较多的随机IO。列式一般会采用基于列的向量化执行引擎,例如ClickHouse、Spark(Arrow执行模式)、DirusDB,为了更好的提升数据分析效率,每一个批次处理一批数据(例如10W条)。
可以理解的是,基于列的模式的实现对吞吐量友好,可以充分利用CPU的缓存和SIMD特性,但是无法良好的支持流计算的按条处理的模式,所以现有的Flink的计算引擎采用基于行的实现,确保了数据处理的低延迟。基于行的问题是CPU缓存不友好,CPU的高速缓存容易发生Cache Miss,导致CPU空转等待从内存加载数据,无法充分利用现代CPU的SIMD特性(全称Single Instruction Multiple Data,单指令多数据流),一条指令只能处理一条数据,而基于列存则可以充分利用现代CPU的SIMD特性,加速计算。
现有的Flink计算引擎存在批流性能难以兼顾以及特定窗口统计场景性能差的问题。本申请实施例通过结合列式计算在批处理中的优势和在流计算场景中基于事件的处理低延迟要求,提出一种批流一体化数据处理系统,优化流处理的场景的同时,也能提升批处理的效率,既能保证批处理中充分利用CPU的缓存和SIMD特性,还能确保流处理中的低延迟特性。
可以理解的是,本申请实施例借鉴数据库领域Pax行列混合存储的思想,改进Flink的内存数据格式,解决上述的批流性能难以兼顾、在流计算模式的Window窗口计算中统计场景性能差的问题,提升实时大规模特征数据计算的效率。
如图2所示,本申请实施例以Flink为基础,基于Pax行列混合内存存储结构,将Flink改造为向量化执行的计算引擎,重点改进3个Flink核心模块:SQL代码生成模块、序列化/反序列化模块、内存抽象模块,不修改Flink的API层,保持对已有的Flink应用程序的兼容,同时也相应的改进Flink的数据处理模式(算子体系)。
需要说明的是,DataStream API和SQL&Table API是Flink中的两种API,依赖于共同的运行时。在读取数据的时候,将Kafka或者HDFS中的数据,使用序列化/反序列化器,直接转换为Pax行列混合存储结构,在内存中进行存储。
1、基于Pax行列混合内存存储结构:
基于Pax行列混合内存存储结构是本次对Flink改进优化的基础,只有实现该模块才能充分利用CPU的SIMD并行计算能力,并且可以兼顾批流两种执行模式的差异。
(1)PAX内存结构详解
行式NSM和列式DSM的数据组织方式各有优劣,Pax的目标是将两者的优点结合,规避两者的缺点。
PAX全称是Partition Attributes Across,它在数据页(Page)里面使用了一种子数据页的方式,将事件的属性切分存储到不同的子数据页中里面。
图3中左侧是行式NSM存储结构,数据页中按顺序连续4个事件,中间是Pax行列混合存储结构,每个属性连续存储,右侧是Pax存储模式的CPU缓存,在CPU缓存中加载一列的数据,对列做计算的时候,可以直接从CPU的L1、L2、L3缓存中获取数据,提升计算效率。
假设事件对象有n个属性,PAX就会将数据页分成n个子数据页(mini page),然后将第一个属性的放在第一个子数据页上面,第二个放在第二个子数据页,以此类推。
在每个数据页的开头,会存放每个子数据页的偏移量(offset),对于定长属性的数据,使用定长子数据页(F-minipage)存储,而对于变长属性的数据,则会使用可变子数据页(V-minipage)。对于定长子数据页来说,最后会有一个位向量(bit vector)来存放nullvalue。而对于变长子数据页来说,最后会保存每个值的在子数据页里面的偏移量(offset)。
可以看到,PAX的格式其实是NSM和DSM的一种折中,当要依据某一列进行读取的时候,可以方便的在子数据页里面顺序扫描,充分利用CPU缓存。而对于需要访问多个属性组装成得到最终对象的时候,仅仅是需要在同一个数据页里面的子数据页之间读取相关的数据。
(2)基于Pax改进适应Flink的流、批计算模式数据页中数据条数的差异:
流计算模式下,Flink按条进行数据处理,批处理模式下,Flink一批一批的进行数据处理,基于Pax的内存结构,在本实施例中,针对流模式和批处理的模式,对Pax做了设定,来兼容批流执行。
为了适应Flink的场景,在本实施例中,对Pax做适应性的设定与改进。在Flink中Pax的数据页主要包含两个参数:数据记录条数和最大等待时间,系统根据批、流计算模式自适应的调整,同时也允许人工干预设定数据页的参数。
数据记录条数,即数据页中可以存储多少条数据,记做N,(N大于等于1,即最少存储1条数据记录)。数据页中可以存储的记录大小,通过数据页空间进行限制,一般建议最大为:数据页默认最大内存空间=Min(2M,CPU二级缓存大小/(2*CPU核数))。
可以理解的是,数据页过大则1个数据页无法放入到CPU的高速缓存中,过小则难以利用CPU的SIMD特性。
数据页的实际内存大小=(N*平均记录长度)*(1+P)+其他开销,其他开销包括数据页头、BitMap、Offset偏移指针等。其中P为膨胀系数,默认5%~10%,避免实际记录长度>平均记录长度,导致数据页无法容纳数据,导致频繁申请新的数据页,影响性能。
在执行过程中,根据实际的数据长度情况,动态调整数据页存储的大小,一般建议不超过数据页默认最大内存空间,特殊情况例外,例如用户手动优化等。
在流计算模式下:
Pax的数据页中默认只保存1条数据记录。为了提高流计算的吞吐量,在流计算中也可以适当放宽数据页中保存的数据条数。
根据是否产生反压(数据积压)时调整N值,
1)产生反压,则调整数据记录条数N=N*2,重新计算数据页的实际内存大小,单次处理更多的数据,降低数据积压;
2)反压恢复或正常执行,则适当的调小N值,N=N/2,重新计算数据页的实际内存大小,更快的处理数据,降低数据延迟;
为了尽可能的保证低延迟,系统使用数据记录条数和超时时间两个维度限制。
设定R为数据页是否向下游发送,true为发送,false为不发送继续写入数据,Psize为当前数据页中的记录条数,S为设定的数据页可以容纳的最大记录条数,Ttimeout为最大允许的等待时间,计算公式如下:
举例来说,最大等待时间为100毫秒,数据页可以容纳的数据记录条数为100条,那么当等待时间超过100毫秒后,无论数据页中是否够100条,都会向下游发送,避免等待时间过长。如果数据条数到达100条,即便是尚未达到最大等待时间,也会向下游发送,降低数据处理的延迟。
在批处理模式下:
关注的是整体吞吐量,单个作业的总体执行时间最短,不需要关注每一条数据处理的延迟,需要尽可能保证数据最大吞吐,使用数据页默认最大内存空间作为数据页实际内存大小,N无默认值,向数据页持续写入数据,直到数据页写满为止。
批处理下最大等待时间参数不生效,只有数据处理完毕之后,接收到数据输入完毕的消息之后,才会停止生成Pax数据页,发送给下游进行批量数据处理。
2、内存抽象
Flink采用自主的内管管理,MemorySegment是Flink中的内存分配的最小单元,该对象默认代表一段32K大小(可以根据需要配置为其他大小)的堆外内存。
数据记录序列化之后,按照Pax数据页格式在内存中进行组织,并使用MemorySegment作为Pax数据页的容器。一个Pax数据页中保存的记录可能会比较多(批处理模式下),所以Pax数据页可能使用多个MemorySegment进行存储。
要支持Pax行列混合的内存结构,需改进Flink下支持如下Pax数据页操作:
(1)插入Insert
当数据插入的时候,会首先生成一个新的数据页,然后根据属性值的长度分配好不同的子数据页,此处需要注意下变长属性值,因为它们的长度是不固定的,所以对于变长属性首先使用系统设定的默认长度,并随着作业的执行不断的统计该属性值的平均长度,后续的分配空间时,使用该平均长度作为分配依据。
以图4为例,插入1条数据记录的时候,将这个数据记录里面的属性(列)分别复制到不同的子数据页上面。如果一条数据记录还能插入到这个数据页,但这条数据记录里面某一个属性的数据不能插入到对应的子数据页了,则会重新调整不同子数据页的边界。如果一个数据页已经满了,那么就会重新生成1个Pax数据页,用于存放新的数据。
(2)更新Update
当数据更新的时候,首先计算这个数据记录需要更新的属性值在不同子数据页里面的偏移量(offset)。以图4为例,对于变长属性来说,如果更新的数据大小超出了子数据页可用空间,例如John这个字段被更新为1个1K长度的字符串,超过了该子数据页的可用空间,子数据页就会尝试向周围的子数据页申请空间,如果相邻子数据页没有足够的额外空间了,则重新申请1个新的Pax数据页,将被更新的数据记录就会被移到新申请的的数据页上面,在旧的数据页中将被更新的记录标记为删除。
(3)删除Delete
在数据页最开始包含一个位图(bitmap),用来标记删除的数据。当数据删除的时候,并不是真正的将数据移除掉,而是在位图中标记被删除的数据记录。
当删除标记越来越多的时候,就可能会影响性能,因为数据页里面出现很多碎片,并不能高效的利用CPU缓存,所以在Shuffle的时候,判断Pax数据页中的待删除的记录超过一定的阈值,删掉标记为删除的数据,则重新生成新的数据页。
Pax数据页中的条数Psize,清理阈值为Pthreshold,标记为删除的条数Pdel_size。
当(Pdel_size/Psize)>Pthreshold时,说明数据页中已经删除的数据超过预期,则进行清理,生成新的数据页,否则不进行清理。
3、序列化/反序列化器
在使用Flink现有的DataStream API进行开发,所以需要开发者编写业务逻辑处理函数代码,开发语言为Java、Scala、Python。
(1)序列化/反序列化在Flink中的作用
首先解释一下,序列化/反序列化在Flink中的作用。上述提到的3种开发语言均为面向对象的开发语言,其代码参数是本语言中定义的原始数据类型和对象类型,用户编写的代码中操作的也是本语言中的对象,而在网络传输中使用的是二进制的数据,所以需要序列化/反序列化作为中间媒介,在数据处理时将二进制数据反序列化为对象(内置或用户自定义Event对象),在数据传输时将数据序列化为二进制数据流。
现有Flink的实现中,使用其内置的序列化器和用户自定义的序列化器实现事件的序列化、反序列化。例如,使用字符串的序列化器(StringSerializer)将字符串“HelloWorld!”序列化为二进制数据流,存储在MemorySegment中进行网络传输,当需要使用的时候进行反序列化,从MemorySegment中读取二进制数据流,反序列化为字符串“HelloWorld!”。
(2)Flink现有行式序列化
Flink中的内存片段对象叫做MemorySegment,代表一段连续的内存地址,使用行式序列化技术的时候,Flink按照对象的字段顺序,将字段值序列化为二进制数据,并连续的保存起来。
(3)基于Pax适配Flink序列化/反序列化方式
单个属性(即列)的序列化/反序列化依然可以复用Flink现有的序列化器,但需要改进Flink的内存数据布局方法,使其可以将事件序列化之后的属性值,按列写入Pax内存结构的子数据页中,从Pax存储结构中读取二进制数据,反序列化为并组装为事件对象。
如图5所示,左侧是原始的数据,右侧是Pax行列混合的内存存储结构,左侧的事件1、事件2按照属性列使用Pax定义的存储结构进行存储。
可以理解的是,与现有技术相比,基于改进之后的序列化,数据组织方式截然不同,现有技术中数据按行组织数据,本申请实施例中数据按列组织数据。
将Pax数据布局方式与Flink基于MemorySegment的内存管理相结合,MemorySegment负责内存的申请和释放,Pax负责MemorySegment中的数据布局。
如图6所示,图中左侧是Flink现有的行式数据组织方法,以数据记录为单位,数据按顺序序列化之后一条条存储在MemorySegment中,反序列化同理,按序读取一条条数据记录。
图中右侧是Flink基于Pax的列式数据组织方式,以Pax数据页为单位,Pax数据页从MemorySegment中申请一段内存生成Pax数据页的实例,当内存不足时,系统申请新的MemorySegment然后分配给Pax数据页。数据序列化之后依次写入Pax所申请的内存段,同理读取以Pax数据页为单位,从MemorySegment中读取一个完整的Pax数据页进行反序列化。
流模式下序列化/反序列化:
接收1条事件,将其数据序列化,按照Pax存储结构写入对应的子数据页,可以理解为1条事件占用1个Pax数据页,反序列化则是从Pax存储结构中读取对应的列值,将其重新组装为事件对象。
适用于流处理的计算模型,事件到计算节点即进行处理,无需像批处理模式那样等待数据,在一个Pax数据页中积攒一批数据之后再进行处理,具有更低的数据处理延迟。
批模式下的序列化/反序列化:
批处理计算模式下,接收多条事件,将其数据按列序列化,按照Pax存储结构写入对应的子数据页,可以理解为1个数据页中存储多个事件,反序列化则是从Pax存储结构中读取对应的列值,将其重新组装为事件对象。
适用于批处理的计算模型,该模式下,(1)可以批量处理数据,单个CPU指令可以处理多条数据,具体处理的数据条数,取决于CPU的指令集,(2)可以批量在网络中传输数据,相比流模式具备更好的数据吞吐量。
4、Flink SQL代码生成
(1)现有代码生成方案
Flink的SQL引擎为了效率,采用了代码生成的方式,将SQL逻辑转换为Java代码,并在内存中编译为Java二进制代码,进行执行,避免采用多层函数调用的方式执行SQL逻辑。
以下边SQL语句为例:
select c1+100,c2 from t where c1<100and c3=10
使用Flink的代码生成,可以直接生成Java语言的简化的表达式运算,上述SQL中的Where条件转换为如下Java代码,在JVM中动态编译执行:(c1<100&&(c3==10)
需要说明的是,上述是Java伪代码,主要是体现动态代码生成的核心机制,因为Java是面向对象语言,所以实际中还需要将代码包装在类的方法中,才能合法的编译为Java字节码。
Flink现有的代码生成逻辑中,数据一条一条的进入算子进行处理,基于Pax改进之后,数据按批进行处理(流模式下,数据按照单条或者多条进行处理)。
(2)基于Pax的SQL代码生成
Flink现有的SQL引擎可以直接访问二进制数据,避免数据处理过程中的序列化、反序列化的开销,直接按位读取二进制数据,使用二进制数据进行运算,所以针对行列混合内存结构,可以直接根据模式的不同进行数据的处理,在SQL代码生成中,需要考虑针对Pax行列混合内存结构进行代码生成,替换掉Flink现有的SQL代码生成的逻辑。
在代码生成过程中,系统识别到不同的Java版本,从而生成最优的Java代码,针对Java 16及以上的版本(JDK16版本开始支持指定SIMD指令集进行优化),使用Java的向量化计算API,并针对SIMD指令集(如SSE、SSE2、SSE4、AVX等)进行编译优化,利用CPU的SIMD能力;针对Java 15及以下版本,则基于向量计算的代码即可,JVM虚拟机可以识别代码中的循环计算自动优化。编译优化结合Pax行列混合内存结构带来的高效CPU缓存。代码生成基本过程如下:
1)环境初始化部分
根据SQL不同算子进行初始化,例如针对不同的Join算法,初始化对应算法的参数;申请计算过程中外排序所需要的内存、临时磁盘存储、文件句柄等额外资源等;
2)计算函数
生成计算过程中所需的临时变量;针对计算中所涉及的列,提取Pax中数据生成对应的数据结构的变量;
在计算过程中,按列访问Pax中的数据,采用循环计算的方式遍历计算;
3)计算结果输出
将计算结果写回Pax结构;
4)环境销毁
释放本次计算所申请的所有相关资源。
以如下SQL语句为例:
select c1+100,c2 from t where c1<100and c3=10
假设Pax存储数据结构为old_PaxData,此处体现了核心的伪代码处理过程,省略从Pax读取数据和写入数据的序列化过程。
基于Pax的代码生成的核心执行代码示例:
long[]c1_100_arr=new long[old_PaxData.length()];
long[]c2_arr=new long[old_PaxData.length()];
//读取Pax存储的数据进行循环计算
for(int i=0;i<old_PaxData.length();i++){
//从Pax中读取列值,循环计算
if(c1<100&&(c3==10)
c1_100_arr[i]=c1+100
c2_arr[i]=c2;
}
//计算结果批量写入Pax,假设新的PaxData为new_PaxData
//将计算结果列值数组c1_100_arr和c2_arr写入
writePaxData(newPaxData,c1_100_arr,c2)
上述计算过程中CPU高速缓存一个数据页,计算过程中无需从内存中加载数据,可以极大的提升Flink的计算效率。
5、Flink数据处理模式改进
基于Pax之后Flink的数据处理模式发生了变化,如图7所示,数据处理从按条处理改进为按数据页进行处理。算子是Flink处理数据的容器,负责执行业务逻辑代码(即本申请实施例中提到的SQL代码生成中动态生成的代码),图7中左侧是Flink现有的数据处理模式,数据一条条的进入到算子中,计算完毕,按条输出给下游。图7中右侧是基于Pax改进之后的计算模式,数据页中的一组数据记录一起进入到算子中,业务逻辑代码从数据页中取出数据记录,多条数据记录循环批量处理,然后写入到新的数据页中,以数据页为单位,发送给下游的算子进行处理。
与现有技术相比,本申请实施例采用行列混合的内存数据结构,支持列式计算充分利用现代CPU的SIMD优化,相比现有的Flink实现,兼顾流处理的低延迟,提供更高的批处理吞吐能力,并且优化了窗口计算的效率。
下面对本申请实施例提供的批流一体化数据处理方法进行描述,下文描述的批流一体化数据处理方法与上文描述的批流一体化数据处理系统可相互对应参照。
请参见图8,本申请实施例提供一体化数据处理方法,包括:
S1、利用内存抽象模块在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
S2、利用序列化与反序列化模块进行数据对象和内存数据的相互转换;
S3、利用SQL代码生成模块根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
S4、利用算子模块采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
可以理解的是上述方法项实施例,是与本申请系统项实施例相对应的,本申请实施例提供的批流一体化数据处理方法,可以实现本申请任意一项系统项实施例提供的批流一体化数据处理系统。
图9示例了一种电子设备的实体结构示意图,如图9所示,该电子设备可以包括:处理器(processor)910、通信接口(Communication Interface)920、存储器(memory)930和通信总线940,其中,处理器910,通信接口920,存储器930通过通信总线940完成相互间的通信。处理器910可以调用存储器930中的计算机程序,以执行批流一体化数据处理方法的步骤,例如包括:
S1、利用内存抽象模块在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
S2、利用序列化与反序列化模块进行数据对象和内存数据的相互转换;
S3、利用SQL代码生成模块根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
S4、利用算子模块采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
此外,上述的存储器930中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各实施例所提供的批流一体化数据处理方法的步骤。
另一方面,本申请实施例还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使处理器执行上述各实施例提供的方法的步骤。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种批流一体化数据处理系统,其特征在于,包括:
内存抽象模块,用于在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
序列化与反序列化模块,用于进行数据对象和内存数据的相互转换;
SQL代码生成模块,用于根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
算子模块,用于采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
2.根据权利要求1所述的批流一体化数据处理系统,其特征在于,所述算子模块包括多个算子单元,每一所述算子单元用于:获取输入数据流,基于所述向量式SQL执行代码从所述数据流的数据页中取出数据记录,在对多条数据记录循环批量处理之后,写入到新的数据页中,继而输出以数据页为单位的数据流。
3.根据权利要求1所述的批流一体化数据处理系统,其特征在于,所述内存抽象模块,具体还用于:根据当前的数据计算模式,选取相应的数据页存储参数对所述内存数据进行内存管理;其中,所述数据页存储参数包括数据记录条数、最大等待时间和数据页默认最大内存空间。
4.根据权利要求3所述的批流一体化数据处理系统,其特征在于,所述内存抽象模块,具体还用于:
在流计算模式下,根据当前数据积压情况对所述内存数据的数据记录条数进行实时自适应调整,在所述数据页默认最大内存空间的约束下,基于所述最大等待时间和调整后的数据记录条数对所述内存数据进行内存管理;
在批处理模式下,基于所述数据页默认最大内存空间对所述内存数据进行内存管理。
5.根据权利要求1所述的批流一体化数据处理系统,其特征在于,所述内存抽象模块包括数据插入管理单元、数据更新管理单元和数据删除管理单元,其中:
所述数据插入管理单元,用于在数据插入时,生成新数据页并根据数据属性值的长度对所述新数据页进行子数据页分配,继而将待插入数据记录的属性分别复制至不同子数据页中;
所述数据更新管理单元,用于在数据更新时,若根据待更新数据记录需要更新的属性值在不同子数据页里面的偏移量判断超出子数据页可用空间,则向该子数据页的相邻子数据页申请空间,若无法从相邻子数据页申请空间,则重新申请新数据页,并将待更新数据记录移到新申请的数据页中,同时将旧数据页中被更新的数据记录标记为删除;
所述数据删除管理单元,用于在数据删除时,在数据页的预设位图中对待删除数据进行标记,当标记的待删除数据记录超过预设阈值时,则对标记的待删除数据记录进行删除,并生成新的数据页进行数据存储。
6.根据权利要求1所述的批流一体化数据处理系统,其特征在于,所述序列化与反序列化模块包括第一序列化与反序列化单元和第二序列化与反序列化单元,其中:
所述第一序列化与反序列化单元,用于在流计算模式下,将接收到的事件数据对象进行序列化并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在流计算模式下,每一子数据页对应存储一条事件数据对象的序列;
所述第二序列化与反序列化单元,用于在批处理模式下,将接收到的多条事件数据对象按列进行序列化,并按照Pax存储结构写入对应的子数据页中;还用于从Pax存储结构中读取对应的列值并重新组装为事件数据对象;其中,在批处理模式下,每一子数据页对应存储多条事件数据对象的序列。
7.根据权利要求1所述的批流一体化数据处理系统,其特征在于,所述SQL代码生成模块,具体用于:在根据SQL算子的参数进行初始化后申请计算所需资源;生成计算过程中所需的临时变量,并针对计算中所涉及的列提取Pax存储结构的数据,采用循环计算的方式遍历计算生成对应的数据结构的变量;将计算结果写回至Pax存储结构的内存数据中,并释放本次计算所申请的计算所需资源。
8.一种批流一体化数据处理方法,其特征在于,包括:
利用内存抽象模块在Flink内存分配最小单元的内部,根据当前的数据计算模式对序列化后的内存数据进行内存管理;其中,所述数据计算模式包括流计算模式和批处理模式,所述内存数据为采用Pax存储结构;
利用序列化与反序列化模块进行数据对象和内存数据的相互转换;
利用SQL代码生成模块根据当前的数据计算模式将待处理内存数据生成基于Pax存储结构的向量式SQL执行代码;
利用算子模块采用基于Pax存储结构的数据处理模式,执行所述向量式SQL执行代码,以对所述待处理内存数据进行数据处理。
9.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求8所述的批流一体化数据处理方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求8所述的批流一体化数据处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210237132.0A CN116775699A (zh) | 2022-03-11 | 2022-03-11 | 一种批流一体化数据处理系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210237132.0A CN116775699A (zh) | 2022-03-11 | 2022-03-11 | 一种批流一体化数据处理系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116775699A true CN116775699A (zh) | 2023-09-19 |
Family
ID=88010342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210237132.0A Pending CN116775699A (zh) | 2022-03-11 | 2022-03-11 | 一种批流一体化数据处理系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116775699A (zh) |
-
2022
- 2022-03-11 CN CN202210237132.0A patent/CN116775699A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5762878B2 (ja) | key−valueストアを有するメモリシステム | |
CN109085997A (zh) | 用于非易失性存储器的存储器高效持续键值储存 | |
JP2021111315A (ja) | ニューラルネットワークデータ処理装置、方法および電子機器 | |
US10019363B2 (en) | Persistent memory versioning and merging | |
TW202024922A (zh) | 存取張量資料的方法和裝置 | |
CN116107754A (zh) | 一种面向深度神经网络的内存管理方法及系统 | |
CN111400306A (zh) | 基于rdma与非易失性内存的基数树访问系统 | |
CN114117992B (zh) | 一种序列化和反序列化方法、装置和电子设备 | |
CN118114737A (zh) | Attention算子的反向传播优化方法和设备 | |
US11429299B2 (en) | System and method for managing conversion of low-locality data into high-locality data | |
CN107451070A (zh) | 一种数据的处理方法和服务器 | |
US8990537B2 (en) | System and method for robust and efficient free chain management | |
US10379899B2 (en) | Systems and methods for frame presentation and modification in a networking environment | |
CN116775699A (zh) | 一种批流一体化数据处理系统及方法 | |
JPWO2019008715A1 (ja) | データロードプログラム、データロード方法およびデータロード装置 | |
CN116737354A (zh) | 算子拆分方法、装置及介质 | |
GB2614676A (en) | Managing least-recently-used data cache with persistent body | |
US10452368B2 (en) | Recording medium having compiling program recorded therein, information processing apparatus, and compiling method | |
US10331369B2 (en) | Array control program, array control method, and array control apparatus | |
CN118193140B (zh) | 一种基于虚拟内存的数据管理方法、设备和存储介质 | |
CN112783896B (zh) | 一种用于加载文件减少内存使用率的方法 | |
GB2516092A (en) | Method and system for implementing a bit array in a cache line | |
CN116188247B (zh) | 寄存器信息处理方法、装置、计算机设备、存储介质 | |
CN118427120B (zh) | 一种分组归一化算子的执行方法、设备及存储介质 | |
WO2024108907A1 (zh) | 一种数据处理方法、装置、ai芯片、电子设备及存储介质 |
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 |