CN117056427A - 混合事务分析系统中的数据处理方法、装置及电子设备 - Google Patents

混合事务分析系统中的数据处理方法、装置及电子设备 Download PDF

Info

Publication number
CN117056427A
CN117056427A CN202311031898.4A CN202311031898A CN117056427A CN 117056427 A CN117056427 A CN 117056427A CN 202311031898 A CN202311031898 A CN 202311031898A CN 117056427 A CN117056427 A CN 117056427A
Authority
CN
China
Prior art keywords
data
column
target
type
file
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
Application number
CN202311031898.4A
Other languages
English (en)
Inventor
石志林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Tencent Computer Systems Co Ltd
Original Assignee
Shenzhen Tencent Computer Systems Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Tencent Computer Systems Co Ltd filed Critical Shenzhen Tencent Computer Systems Co Ltd
Priority to CN202311031898.4A priority Critical patent/CN117056427A/zh
Publication of CN117056427A publication Critical patent/CN117056427A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • G06F16/1815Journaling file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1865Transactional file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请实施例提供了一种混合事务分析系统中的数据处理方法、装置及电子设备。其中方法包括:在接收到查询请求时,确定查询请求对应的目标表组分片;若查询请求为查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;若查询请求为列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。该方案中同时提供了行式分片存储形式和列式分片存储形式,同时每条数据都通过不同的写入日志序列号区分了不同版本,使得事务处理时延小,分析处理吞吐量大。

Description

混合事务分析系统中的数据处理方法、装置及电子设备
技术领域
本申请涉及数据库技术领域,具体而言,本申请涉及一种混合事务分析系统中的数据处理方法、装置及电子设备。
背景技术
在电子商务、广告推荐、数据分析等重要业务场景中,现代企业利用大数据来分析发现商业洞见,广告、电商等服务系统的大数据系统通常会聚合实时数据来不断分析挖掘新鲜的产品和用户数据,这些数据被广泛用于在线和离线场景中。在上述多个场景中需要同时支持实时的事务处理和复杂的分析处理,即涉及到处理混合了事务处理和分析处理的任务。
现有的大数据解决方案通常使用不同系统的组合,来处理混合事务分析处理任务,会导致数据冗余和复杂的数据同步,进而导致事务处理时延大,分析处理吞吐量小。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,本申请实施例所提供的技术方案如下:
第一方面,本申请实施例提供了一种混合事务分析系统中的数据处理方法,包括:
在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;
若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;
若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
在本申请的一种可选实施例中,第一内存表和各行式分片文件中存储有各数据的删除标记,且第一内存表和各行式分片文件中的数据按键值连续存储,删除标记用于指示对应的数据是否被删除;
基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果,包括:
获取第一内存表中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第一数据,并获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据;
基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果。
在本申请的一种可选实施例中,各行式分片文件中包含有行式索引块和多个行式数据块,行式索引块中存储有各行式数据块中键值的索引,各行式数据块中的各数据按键值连续存储;
获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据,包括:
从各行式分片文件中确定包含有目标键值的目标行式分片文件;
对于每一目标行式分片文件,基于目标行式分片文件中的索引块中的索引信息,确定包含目标键值的目标行式数据块,并从目标行式数据块中获取键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第三数据;
将从各目标行式分片文件中获取的第三数据作为第二数据。
在本申请的一种可选实施例中,基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果,包括:
若第一数据和第二数据都为空,则确定点查询结果为空,若第一数据和第二数据不为空,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果;
获取第一数据和第二数据中最小的写入日志序列号对应的数据,若数据的删除标记指示数据被删除,则确定点查询结果为空,若数据的删除标记指示数据未被删除,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果。
在本申请的一种可选实施例中,该方法还包括:
在获取到针对目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将写入日志序列号、第一写入请求对应的写入数据和删除标记存储至第一内存表中,其中,若第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除。
在本申请的一种可选实施例中,该方法还包括:
在第一内存表中的数据量达到第一预设值时,将第一内存表中的数据写入到行分级日志树的最低层存储结构中,行分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个行式分片文件;
在行分级日志树的任一层存储结构中各行式分片文件的数据量达到第二预设值时,将该层存储结构中各行式分片文件合并后存储至更高一层的存储结构中。
在本申请的一种可选实施例中,第二内存表和各列式分片文件中的数据按列值连续存储;
基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果,包括:
获取第二内存表中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第四数据,并获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第五数据;
将第四数据和第五数据作为列扫描结果。
在本申请的一种可选实施例中,各列式分片文件中包含有列式索引块和多个列式数据块,列式索引块中存储有各列式数据块中列值的索引,各列式数据块中的各数据按列值连续存储;
获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号第五的数据,包括:
从各列式分片文件中确定包含有目标列值的目标列式分片文件,目标列式分片中的最大写入日志序列号不大于第二读取日志序列号,或者目标列式分片文件中有部分日志序列号不大于第二读取日志序列号,且目标列式分片文件中不包含被删除的数据;
对于每一目标列式分片文件,基于目标列式分片文件中的列式索引块中的索引信息,确定包含目标列值的目标列式数据块,并从目标列式数据块中获取列值与目标列值相同且写入日志序列号不大于第一读取日志序列号的第六数据;
将从各目标列式分片文件中获取的第六数据作为第五数据。
在本申请的一种可选实施例中,目标表组分片还包括数据删除指示位图,数据删除指示位图用于指示各列式分片文件中的各数据是否被删除;
从各列式分片文件中确定包含有目标列值的目标列式分片文件,包括:
从各列式分片文件中获取包含有目标列值的第一列式分片文件;
对于每一第一列式分片文件,获取列式分片文件对应的日志序列号指示位图,并基于数据删除指示位图和日志序列号指示位图对第一列式分片文件中的数据进行筛选,得到对应的第二列式分片文件,日志序列号指示位图用于指示列式分片文件中各数据的写入日志序列号是否不大于第二读取日志序列号;
将各第一列式分片文件对应的第二列式分片文件作为目标列式分片文件。
在本申请的一种可选实施例中,目标表组分片还包含有主键索引,主键索引用于存储在各列式分片中已有的数据的索引信息,方法还包括:
在获取到针对目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若第二写入请求所针对的数据在主键索引中存在索引信息,则基于主键索引中的索引信息,将写入请求对应的写入数据和写入日志序列号写入数据所在的列式分片文件,并同步更新数据删除指示位图和主键索引;
若第二写入请求所针对的数据在主键索引中不存在索引信息,则直接将写入数据和写入日志序列号写入第二内存表,并同步更新主键索引。
在本申请的一种可选实施例中,该方法还包括:
在第二内存表中的数据量达到第一预设值时,将第二内存表中的数据写入到列分级日志树的最低层存储结构中,列分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个列式分片文件;
在列分级日志树的任一层存储结构中各列式分片文件的数据量达到第二预设值时,将该层存储结构中各列式分片文件合并后存储至更高一层的存储结构中。
第二方面,本申请实施例提供了一种混合事务分析系统中的数据处理装置,包括:
目标表组分片确定模块,用于在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;
点查询结果获取模块,用于若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;
列扫描结果获取模块,用于若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
在本申请的一种可选实施例中,第一内存表和各行式分片文件中存储有各数据的删除标记,且第一内存表和各行式分片文件中的数据按键值连续存储,删除标记用于指示对应的数据是否被删除;
点查询结果获取模块具体用于:
获取第一内存表中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第一数据,并获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据;
基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果。
在本申请的一种可选实施例中,各行式分片文件中包含有行式索引块和多个行式数据块,行式索引块中存储有各行式数据块中键值的索引,各行式数据块中的各数据按键值连续存储;
点查询结果获取模块进一步用于:
从各行式分片文件中确定包含有目标键值的目标行式分片文件;
对于每一目标行式分片文件,基于目标行式分片文件中的索引块中的索引信息,确定包含目标键值的目标行式数据块,并从目标行式数据块中获取键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第三数据;
将从各目标行式分片文件中获取的第三数据作为第二数据。
在本申请的一种可选实施例中,点查询结果获取模块进一步用于:
若第一数据和第二数据都为空,则确定点查询结果为空,若第一数据和第二数据不为空,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果;
获取第一数据和第二数据中最小的写入日志序列号对应的数据,若数据的删除标记指示数据被删除,则确定点查询结果为空,若数据的删除标记指示数据未被删除,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果。
在本申请的一种可选实施例中,该装置还包括行式写入模块,用于:
在获取到针对目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将写入日志序列号、第一写入请求对应的写入数据和删除标记存储至第一内存表中,其中,若第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除。
在本申请的一种可选实施例中,行式写入模块进一步用于:
在第一内存表中的数据量达到第一预设值时,将第一内存表中的数据写入到行分级日志树的最低层存储结构中,行分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个行式分片文件;
当行分级日志树的任一层存储结构中各行式分片文件的数据量达到第二预设值时,将该层存储结构中各行式分片文件合并后存储至更高一层的存储结构中。
在本申请的一种可选实施例中,第二内存表和各列式分片文件中的数据按列值连续存储;
列扫描结果获取模块具体用于:
获取第二内存表中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第四数据,并获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第五数据;
将第四数据和第五数据作为列扫描结果。
在本申请的一种可选实施例中,各列式分片文件中包含有列式索引块和多个列式数据块,列式索引块中存储有各列式数据块中列值的索引,各列式数据块中的各数据按列值连续存储;
列扫描结果获取模块进一步用于:
从各列式分片文件中确定包含有目标列值的目标列式分片文件,目标列式分片中的最大写入日志序列号不大于第二读取日志序列号,或者目标列式分片文件中有部分日志序列号不大于第二读取日志序列号,且目标列式分片文件中不包含被删除的数据;
对于每一目标列式分片文件,基于目标列式分片文件中的列式索引块中的索引信息,确定包含目标列值的目标列式数据块,并从目标列式数据块中获取列值与目标列值相同且写入日志序列号不大于第一读取日志序列号的第六数据;
将从各目标列式分片文件中获取的第六数据作为第五数据。
在本申请的一种可选实施例中,目标表组分片还包括数据删除指示位图,数据删除指示位图用于指示各列式分片文件中的各数据是否被删除;
列扫描结果获取模块进一步用于:
从各列式分片文件中获取包含有目标列值的第一列式分片文件;
对于每一第一列式分片文件,获取列式分片文件对应的日志序列号指示位图,并基于数据删除指示位图和日志序列号指示位图对第一列式分片文件中的数据进行筛选,得到对应的第二列式分片文件,日志序列号指示位图用于指示列式分片文件中各数据的写入日志序列号是否不大于第二读取日志序列号;
将各第一列式分片文件对应的第二列式分片文件作为目标列式分片文件。
在本申请的一种可选实施例中,目标表组分片还包含有主键索引,主键索引用于存储在各列式分片中已有的数据的索引信息;该装置还包括列式写入模块,用于:
在获取到针对目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若第二写入请求所针对的数据在主键索引中存在索引信息,则基于主键索引中的索引信息,将写入请求对应的写入数据和写入日志序列号写入数据所在的列式分片文件,并同步更新数据删除指示位图和主键索引;
若第二写入请求所针对的数据在主键索引中不存在索引信息,则直接将写入数据和写入日志序列号写入第二内存表,并同步更新主键索引。
在本申请的一种可选实施例中,列式写入模块进一步用于:
在第二内存表中的数据量达到第一预设值时,将第二内存表中的数据写入到列分级日志树的最低层存储结构中,列分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个列式分片文件;
当列分级日志树的任一层存储结构中各列式分片文件的数据量达到第二预设值时,将该层存储结构中各列式分片文件合并后存储至更高一层的存储结构中。
第三方面,本申请实施例提供了一种电子设备,包括存储器和处理器;
存储器中存储有计算机程序;
处理器,用于执行计算机程序以实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
第五方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行时实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
本申请实施例提供的技术方案带来的有益效果是:
在接收到查询请求时,对于事务处理任务对应的点查询请求,基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果,对于分析处理任务对应的列扫描请,基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果,由于该方案中同时提供了行式分片存储形式和列式分片存储形式,同时每条数据都通过不同的写入日志序列号区分了不同版本,在处理混合事务分析处理任务,能够避免数据冗余和复杂的数据同步,能够进行低时延的点查询和高吞吐量的列扫描,进而使得事务处理时延小,分析处理吞吐量大。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的实现混合事务分析系统中的数据处理方法的系统架构示意图;
图2为本申请实施例提供的一种混合事务分析系统中的数据处理方法的流程示意图;
图3为本申请实施例的一个示例中数据混合事务和分析处理的整体示意图;
图4为本申请实施例的一个示例中行式分片的结构示意图;
图5为本申请实施例的一个示例中列式分片的结构示意图;
图6为本申请实施例的一个示例中列式分片中数据写入流程示意图;
图7为本申请实施例的一个示例中列式分片中数据更新的流程示意图;
图8为本申请实施例提供的一种混合事务分析系统中的数据处理装置的结构框图;
图9为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
OLTP(Online Transaction Processing):是“联机事务处理”的缩写,指的是一种在实时环境下处理交易和业务操作的数据库处理系统。在OLTP系统中,每个交易和业务操作都被视为一个事务,这个事务必须满足ACID属性:原子性、一致性、隔离性和持久性。这意味着在一个事务中,所有的操作要么全部成功,要么全部失败,保证了数据的完整性和一致性。
OLAP(Online Analytical Processing):全称为“联机分析处理”,它是一种数据分析和处理技术,可以用来快速地对大规模数据进行复杂的分析和查询。它主要用于数据仓库和商业智能系统中,可以通过多维数据分析的方式,对数据进行多维度的探索和分析,可以实现对数据的多角度、多维度的分析,从而更好地支持决策分析。
混合事务分析处理系统(本申请中也称混合事务分析系统):是一种混合事务处理和分析处理的综合系统,将事务处理和分析处理放在同一个系统中,能够解决数据复制和数据同步问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图1为本申请实施例提供的实现混合事务分析系统中的数据处理方法的系统架构示意图,该系统包括外部业务系统、存储引擎和对应的分布式存储系统。其中,存储引擎用于存储数据,外部业务系统用于生产数据或消费数据,其生产的数据会通过存储引擎存储至分布式系统。下面具体来对存储引擎进行详细说明,存储引擎在进行数据存储时,可以将多个相互关联的数据表组合为表组,然后对表组进行分片存储至分布式存储系统,即一个表组会被划分为多个表组分片。存储引擎在进行数据存储时,可以存储多个不同版本的数据,即在数据存储时通过数据预写,为数据生成对应的写入日志序号,每个版本的数据对应于特定的写入日志序号。
具体来说,表组包括多张数据表。根据相关性将表进行分组的,将经常进行关联的表组合在一起有助于消除不必要的数据传输,形成表组。每个表组被划分为许多表组分片,每个表组分片包含一个表的基础数据和所有相关索引信息。表组分片是本申请实施例中数据管理基本单元,也是表的基本单位。每个表组包含一个预写入日志管理器和多个表组分片,其中每个表组分片应一个分区,用于存储单个表的基础数据和所有相关的索引信息。本申请实施例中,每个表组分片又可以分为行存储(对应于行式分片文件)和列存储(对应于列式分片文件)两种格式,以便最大化地优化点查询和顺序扫描等操作。数据的写入和读取都由各自的表组分片独立管理,支持多版本读取。
存储引擎用预写日志来保证数据的原子性和持久性,即在写入数据时为每条数据生成写入日志序列号。当创建、更新、删除操作发生时,存储引擎先通过预写入日志管理器写预写日志生成对应的写入日志序列号,再写到对应表组分片的内存表中,等到内存表积累到一定的规模或者到了一定的时间,就会把这个内存表切换为不可更改的内存表,并新开一个内存表接收新的写入请求。而这个不可更改的内存表就可以刷数据到磁盘,变成不可更改的文件;当不可更改的文件生成后,数据就可以持久化。当系统发生错误崩溃后,系统重启时会去预写日志读日志,恢复还没有持久化的数据。只有当一个日志文件对应的数据都持久化后,预写日志管理器才会把这个日志文件删除。
存储引擎会把每个表组分片的把数据存在分布式文件存储系统中,例如ApacheHDFS(Hadoop分布式文件系统)。行存文件的存储方式可以是Sorted String Table(SST,一种用于存储和检索键值对的数据结构)格式。列存文件可以支持两种存储格式:一种是类似PAX(一种用于存储和压缩数据的文件格式,是一种压缩和归档工具的标准格式)的自研格式,另外一种是改进版的Apache ORC(Optimized Row Columnar,一种用于大规模数据存储和分析的列式存储格式)格式,这两种列存格式都针对文件扫描的场景进行了优化。
为了避免每次读数据都从磁盘文件中读取,存储引擎通过块缓存把常用和最近用的数据放在内存中,减少不必要的I/O(Input/Output,输入/输出),加快读的性能。在同一个节点内,所有的分片共享一个块缓存。块缓存有两种淘汰策略:LRU(Least RecentlyUsed,最近最少使用)和LFU(Least Frequently Used,最近不常用)。LRU算法是首先淘汰最长时间未被使用的块,而LFU是先淘汰一定时间内被访问次数最少的块。
进一步地,每个表组构成了一个存储管理和恢复的单元。一个表组由多个表组分片组成,这些表组分片会共享一个预写入日志。本申请实施例使用分级日志树进行分片文件的管理,所有的新数据都是以添加的形式插入分级日志树中。数据先写到表组分片所在的内存表,积累到一定规模后写入到分级日志树的分片文件中。当一个数据文件关闭后里面的内容就不会变了。新的数据以及后续的更新都会写到新的文件。与传统数据库的数据结构相比,分级日志树减少了随机I/O,大幅的提高了写的性能。当写操作不断进来,每个表组分片里会积累出很多分片文件。当一个表组分片里小分片文件积累到一定数量时,存储引擎会在后台把小分片文件合并起来,这样系统就不需要同时打开很多分片文件,能减少使用系统资源,更重要的是合并后文件减少了,提高了读的性能。
图2为本申请实施例提供的一种混合事务分析系统中的数据处理方法的流程示意图,该方法的执行主体可以是图1中的存储引擎,如图2所示,该方法可以包括:
步骤S201,在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号。
其中,查询请求可以是外部业务系统发送的,可以是事务处理(OLTP)系统发送的事务处理任务对应的点查询请求,即查询数据表中某一行或多行数据,也可以是分析处理(OLAP)系统发送的分析处理任务对应的列扫描请求,即查询数据表中某一列或多列的数据。点查询请求中包含有确定行的键值和所要查询的数据版本(即第一读取日志序列号),列扫描请求中包含有确定列的列值和所要查询的数据版本(即第二读取日志序列号)。
由前文描述可知,一个表组会被划分为多个表组分片进行存储,每个表组分片中的数据会以行式存储和列式存储两种存储形式进行存储,其中行式存储的表组分片包含有第一内存表和多个行式分片文件,第一内存表和多个行式分片文件中的数据都为行式存储形式,且多个行式分片文件以分级日志树的形式进行存储(对应于行分级日志树)。列式存储的表组分片包含有第二内存表和多个列式分片文件,第二内存表和多个列式分片文件中的数据都为列式存储形式,且多个列式分片文件以分级日志树的形式进行存储(对应于列分级日志树)。
具体地,在接收到查询请求后,首先可以根据查询请求中所要查询的数据的键值确定其所在的表组分片,即确定目标表组分片。由前文描述可知,把目标表组分片有两种存储形式。然后可以进一步根据查询请求的类型确定从哪种存储形式对应的内存表和多个分片文件中获取查询结果。
需要说明的是,为了便于描述后文中的数据可以指的是一条数据,即数据表中的一行数据,例如,可以是一条订单数据,该条订单数据可以包含不同列对应的列值,例如包含姓名列、ID列、订单金额列等,那么可以将ID列的值作为其键值。在该订单数据写入存储引擎时会对应存储其写入日志序列号,用于区分某一ID在不同时刻的订单数据,换言之,在本申请实施例的存储系统中会相同的键值可以有多条对应的数据,且这多个数据通过不同的写入日志序列号进行区分。一条数据在后文中也可称为一条业务记录,或简称为记录。
步骤S202,若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果。
具体地,若查询请求为事务处理任务对应的点查询请求,那么需要从目标表组分片的行式存储形式对应的第一内存表和多个行式分片文件中获取点查询结果,具体来说,首先需要基于第一读取日志序列号和写入日志序列号确定哪些数据对当前查询可见,然后再进一步基于目标键值确定哪些数据为点查询结果。
步骤S203,若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
具体地,若查询请求为分析处理任务对应的列扫描请求,那么需要从目标表组分片的列式存储形式对应的第二内存表和多个列式分片文件中获取列扫描结果,具体来说,首先需要基于第二读取日志序列号和写入日志序列号确定哪些数据对当前查询可见,然后再进一步基于目标列值确定哪些数据为点列扫描结果。
如图3所示,表组分片以分级日志树的方式统一管理,每个表组分片包括一个内存表和一组不可变分片文件,这些分片文件保存在分布式文件系统中。内存表会定期刷新为一个分片文件,这些分片文件组成了多个层级,L0,L1,……,LN(图中仅示出三层,可以根据实际需求设置多层)。在L0中,每个分片文件对应一个已刷新的内存表。从L1开始,该层级中的所有记录(数据)都按键进行排序和划分为不同的分片文件,因此同一层级的不同分片文件的键范围不重叠。Li+1可以容纳比Li多K倍的分片文件,每个分片文件最大数据量可以设置为128M。另外,每个表组分片还可以维护一个元数据文件,用于存储其分片文件的状态。由于记录进行了版本控制,因此表组分片中的读和写是完全解耦的。除此之外本申请实施例采用无锁的方法,只允许一个预写入日志写入器,但允许任意数量的读取器同时访问一个表组分片。由于混合事务和分析负载的场景对一致性的要求比单纯事物场景要弱,因此系统选择仅支持原子写操作,以实现高吞吐量和低延迟的读取和写入。接下来将详细解释如何执行读写操作。
表组分片中的写操作:本申请实施例可以支持两种类型的写操作:单分片写入和分布式批量写入。这两种写入方式都具有原子性,即写入要么提交,要么回滚。单分片写入一次更新一个表组分片速率极高。另一方面分布式批量写入用于将大量数据转储到多个表组分片中,作为单个事务进行操作通常频率较低。
单分片写入可以包括以下几个步骤:(1)接收到单分片写入请求后,预写入日志管理器分配写请求,其中包括时间戳和递增序列号。(2)创建新的日志记录并将该记录持久化到文件系统中。日志记录包含重放记录所需的必要信息,日志记录完全持久化后写入提交。(3)写入请求中的操作将应用于对应表组分片的内存表,使其对新的读取请求可见,不同表组分片上的更新可以并行化。(4)一旦内存表满了,就会将其作为执行分片文件刷新到文件系统中,并初始化一个新的分片文件。(5)最后执行分片文件会在后台异步压缩。在内存表刷新结束后,对应的白表组分片的元数据文件将更新。
分布式批量写入:分布式批量写入始终发生在多个表组分片上。由于批量写入非常耗时,系统将批量写入转换为多个单分片写入。这些单分片写入在每个表组分片上独立发生。在完成所有单个表组分片写入之后,批量写入完成并提交。具体来说,本申请实施例可以采用两阶段提交机制来保证分布式批量写入的写入原子性。接收到批量写入请求的前端节点锁定所有访问的涉及表组分片的分片。然后每个表组分片可以执行以下步骤:
(1)为这批写分配了一个日志序列号,(2)刷新涉及的表组分片的内存表,(3)与单分片写入过程相同,即加载数据并刷新执行分片文件。步骤(3)可以通过建立多个内存表并行刷新文件来优化。完成后每个表组分片都会对前端节点进行投票。当前端节点收集到参与的表组分片的所有投票时,它会确认它们的最终提交或中止决定。在收到提交决定时,每个表组分片都会持久化一个日志,标志该批写入已提交;否则的话此批写入生成的所有新文件都将会被删除。两阶段提交完成后,所有涉及分片的锁定被释放。
表组分片中的读操作:本申请实施例可以支持行和列分片的多版本读取。读取请求的一致性级别为“客户端始终会看到自己最新的已提交写入”。每个读取请求包含一个读取时间戳,该时间戳用于构建LN-Read(即第一读取日志序列号或第二读取日志序列号)。此LN-Read用于过滤对当前读取不可见的记录,不可见的记录即LN(即写入日志序列号)大于LN-Read的记录。
另外,为了促进多版本读取,每个表组分片针对每个表维护一个LN-ref(合并日志序列号),它为此表组分片中的分片文件维护一个最旧版本的合并日志序列号。LN-ref定期根据用户指定的保留时间进行更新。在内存表刷新和文件压缩期间,对于给定的键:其日志序列号等于或小于LN-ref的记录被合并;日志序列号大于LN-ref的记录保持不变。
进一步地,在本申请实施例中,表组分片的所有读取和写入都可以位于同一工作节点上,以共享此表组分片的内存表。如果工作节点工作负载剧增,系统会将一些表组分片迁移出超载的工作节点。
本申请提供的方案,在接收到查询请求时,对于事务处理任务对应的点查询请求,基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果,对于分析处理任务对应的列扫描请,基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果,由于该方案中同时提供了行式分片存储形式和列式分片存储形式,同时每条数据都通过不同的写入日志序列号区分了不同版本,在处理混合事务分析处理任务,能够避免数据冗余和复杂的数据同步,能够进行低时延的点查询和高吞吐量的列扫描,进而使得事务处理时延小,分析处理吞吐量大。
下面将进一步对行式分片存储形式和列式存储形式两者中的数据查询和数据写入进行详细说明。
在本申请的一种可选实施例中,第一内存表和各行式分片文件中存储有各数据的删除标记,且第一内存表和各行式分片文件中的数据按键值连续存储,删除标记用于指示对应的数据是否被删除;
基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果,包括:
获取第一内存表中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第一数据,并获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据;
基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果。
其中,本申请实施例中每条数据在存储时会同时存储一个其对应的删除标记,该删除标记用于指示该数据是否处于被删除的状态,该删除标记可以为“1”和“0”,“1”表示该条数据被删除,“0”表示该条数据未被删除。
具体地,从目标表组分片的行式存储形式中获取点查询结构,则是分别从第一内存表和多个行式分片文件中获取目标键值对应的当前查询可见的数据。可以理解的是,在第一内存表和多个行式分片文件中可能会存在与目标键值对应的多条不同版本的数据。
在本申请的一种可选实施例中,各行式分片文件中包含有行式索引块和多个行式数据块,行式索引块中存储有各行式数据块中键值的索引,各行式数据块按中的各数据键值连续存储;
获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据,包括:
从各行式分片文件中确定包含有目标键值的目标行式分片文件;
对于每一目标行式分片文件,基于目标行式分片文件中的索引块中的索引信息,确定包含目标键值的目标行式数据块,并从目标行式数据块中获取键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第三数据;
将从各目标行式分片文件中获取的第三数据作为第二数据。
其中,目标表组分片中包含有多个行式分片文件,进一步地,为了便于点查询,每个行式分片又包含一个行式索引块和多个行式数据块。
具体地,在从目标表组分片的各行式分片文件中获取第二数据时,首先确定出包含有目标键值的目标行式分片文件,然后基于每个目标行式分片文件的行式索引块,确定出包含该目标键值的行式数据块,并进一步获取写入日志序列号不大于第一读取日志序列号的第三数据。各个目标表组分片中获取到的第三数据,即所要获取的第二数据。
在本申请的一种可选实施例中,基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果,包括:
若第一数据和第二数据都为空,则确定点查询结果为空,若第一数据和第二数据不为空,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果;
获取第一数据和第二数据中最小的写入日志序列号对应的数据,若数据的删除标记指示数据被删除,则确定点查询结果为空,若数据的删除标记指示数据未被删除,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果。
其中,写入日志序列号越小,说明其对应的数据的写入时间越早,比较查询请求中携带的读取日志序列号和数据的写入日志序列号,可以确定该数据是否对当前查询可见,具体来说,大于读取日志序列号的写入日志序列号对应的数据对当前查询不可见,不大于读取日志序列号的写入日志序列号对应的数据对当前查询可见。
在本申请的一种可选实施例中,该方法还可以包括:
在获取到针对目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将写入日志序列号、第一写入请求对应的写入数据和删除标记存储至第一内存表中,其中,若第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除;
在第一内存表中的数据量达到第一预设值时,将第一内存表中的数据写入到行分级日志树的最低层存储结构中,行分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个行式分片文件;
在行分级日志树的任一层存储结构中各行式分片文件的数据量达到第二预设值时,将该层存储结构中各行式分片文件合并后存储至更高一层的存储结构中。
具体地,对于目标表组分片,其对应的行式存储形式的数据写入构成也是先写入对应的第一内存表,待内存表的数据量到达一定阈值(即第一预设值)后,将内存表中的数据数刷新(flush)到分级日志树中。在分级日志树中也会按层级结构进行由低层级到高层级的刷新。
具体来说,行式分片被优化以支持给定键的高效点查询。如图4所示,本申请实施例中第一内存表维护为Memtree结构,按照它们的键对记录进行排序存储,每条数据的具体形式可以为<key,<列值,删除标记、LN>,其中key值为数据的键值,列值为该条数据中各列对应的具体值,LN为该条数据的写入日志序列号。行式分片文件具有块状结构,一个行式分片文件由两种类型的块组成,行式数据块和行式索引块。行式分片文件中的数据按键排序,连续的数据作为数据块分组,为了通过它们的键可以快速查找到数据,需要进一步记录每个数据块的起始键和它在分片文件中的偏移量作为索引块中的一对键值对<key,blockoffset>(键,块偏移量)。为了支持多版本数据,存储在行式分片中的值被扩展为<列值,删除标记,LN>(列值,删除标记,日志序列号),其中,列值是非主键列的值;删除标记表明这条数据是否已删除;LN是对应的写入日志序列号。给定一个键,第一内存表和行式分片文件都可能有多个具有不同写入日志序列号的数据。
在针对目标表组分片的行式存储形式进行数据查询时,每个读取都包括一个目标key和一个LN-read(即第一读取日志序列号)。结果通过在该目标表组分片的第一内存表和各行式分片文件中并行搜索获得。只搜索包含给定的目标key的行式分片文件。在搜索过程中,如果记录包含给定的目标key并且其写入日志序列号等于或小于LN-read,则标记记录为候选记录。候选记录按其日志序列号的顺序合并作为结果记录。如果结果记录中的删除位(delete bit)等于1,或找不到候选记录,则版本LN-read中没有给定键的记录存在。否则返回结果记录。
在针对目标表组分片的行式存储形式进行数据写入时,插入或更新包括key、colsvalue(列值)和LN-write(写入日志序列号)。删除包含一个key、一个特殊的删除标记和LN-write。每个写入都被转换为行式分片文件中的键值对。对于插入和更新,删除标记位被设置为0。对于删除,列字段为空,删除标记位设置为1。将键值对首先追加到内存表中,一旦内存表满了,就会将其作为分片文件在L0中刷新到文件系统中。如果Li满了,则会进一步触发从Li到Li+1的级联压缩。
在本申请的一种可选实施例中,第二内存表和各列式分片文件中的数据按列值连续存储;
基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果,包括:
获取第二内存表中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第四数据,并获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第五数据;
将第四数据和第五数据作为列扫描结果。
具体地,从目标表组分片的列式存储形式中进行列扫描,需要分别从对应的第二内存表和各列式分片文件中获取与目标列值对应的对当前查询可见的数据列。
在本申请的一种可选实施例中,各列式分片文件中包含有列式索引块和多个列式数据块,列式索引块中存储有各列式数据块中列值的索引,各列式数据块中的各数据按列值连续存储;
获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号第五的数据,包括:
从各列式分片文件中确定包含有目标列值的目标列式分片文件,目标列式分片中的最大写入日志序列号不大于第二读取日志序列号,或者目标列式分片文件中有部分日志序列号不大于第二读取日志序列号,且目标列式分片文件中不包含被删除的数据;
对于每一目标列式分片文件,基于目标列式分片文件中的列式索引块中的索引信息,确定包含目标列值的目标列式数据块,并从目标列式数据块中获取列值与目标列值相同且写入日志序列号不大于第一读取日志序列号的第六数据;
将从各目标列式分片文件中获取的第六数据作为第五数据。
其中,列式分片文件也是包含一个列式索引块和多个列式数据块,其构成原理与行式分片文件相同,仅数据存储的具体形式不同,其定位目标列的原理也是基于索引块中的索引信息进行定位。
在本申请的一种可选实施例中,目标表组分片还包括数据删除指示位图,数据删除指示位图用于指示各列式分片文件中的各数据是否被删除;
从各列式分片文件中确定包含有目标列值的目标列式分片文件,包括:
从各列式分片文件中获取包含有目标列值的第一列式分片文件;
对于每一第一列式分片文件,获取列式分片文件对应的日志序列号指示位图,并基于数据删除指示位图和日志序列号指示位图对第一列式分片文件中的数据进行筛选,得到对应的第二列式分片文件,日志序列号指示位图用于指示列式分片文件中各数据的写入日志序列号是否不大于第二读取日志序列号;
将各第一列式分片文件对应的第二列式分片文件作为目标列式分片文件。
其中,在列式存储形式下,本申请实施例中另外设置了各列式分片文件的数据删除指示位图(或称删除Map),该删除Map用于指示各列式分片文件中哪些数据为被删除状态。具体来说,可以是每一列式分片文件对应一个删除Map,例如,对于某一列式分片文件,其ID为1,那么其对应的删除Map的格式可以为<ID=1,[1,0,1,0,1]>,其中,[1,0,1,0,1]表示ID为1的列式分片文件中第1、3、5条数据的删除标记指示其为被删除状态。
其中,根据第二读取日志序列号和各列式分片文件中数据的写入日志序列号,可以获取各列式分片文件日志序列号指示位图,该日志序列号指示位图用于指示列式分片文件中各数据的是否对当前查询可见。
具体地,各列式分片文件中的数据要对当前查询可见,既要满足其写入日志序列号不大于第二读取日志序列号,又要满足其没有被删除。因此综合各列式分片文件对应的删除Map和日志序列号指示位图,即可确定出其中哪些数据对当前查询可见,进而得到目标列式分片文件。
在本申请的一种可选实施例中,目标表组分片还包含有主键索引,主键索引用于存储在各列式分片中已有的数据的索引信息,该方法还可以包括:
在获取到针对目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若第二写入请求所针对的数据在主键索引中存在索引信息,则基于主键索引中的索引信息,将写入请求对应的写入数据和写入日志序列号写入数据所在的列式分片文件,并同步更新数据删除指示位图和主键索引;
若第二写入请求所针对的数据在主键索引中不存在索引信息,则直接将写入数据和写入日志序列号写入第二内存表,并同步更新主键索引;
在第二内存表中的数据量达到第一预设值时,将第二内存表中的数据写入到列分级日志树的最低层存储结构中,列分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个列式分片文件;
在列分级日志树的任一层存储结构中各列式分片文件的数据量达到第二预设值时,将该层存储结构中各列式分片文件合并后存储至更高一层的存储结构中。
具体来说,列式存储形式旨在促进列扫描。如图5所示,与行式存储形式不同,列式存储形式由两个组成部分组成,即列分级日志树和系统分片文件。存储在列分级日志树中的值以扩展格式为<列值,LN>,其中列值是非主键列,LN是相应的写入日志序列号。第二内存表以Apache Arrow(一个跨语言的内存数据格式)的格式存储记录。数据按到达顺序连续附加到第二内存表中。在列式分片文件中,数据按key排序并逻辑上分成行组,行组中的每个列都存储为单独的数据块。同一列的数据块以连续形式存储在列式分片文件中,以便进行顺序扫描。
另外,本申请实施例还在元数据块中维护每个列以及整个分片文件的元数据,以加快大规模数据检索的速度。元数据块可以存储以下内容:对于每个列,数据块的偏移量,每个数据块的值范围和编码方案,以及对于分片文件,压缩方案,总行数,日志序列号和密钥范围。为了快速定位给定键的行,本申请实施例中在列式索引块中存储行组的第一个排序键。
对于列式存储形式下的数据查询(即列扫描),列扫描包括目标列值和LN-read(即第二读取日志序列号)。读取结果通过扫描第二内存表和所有列式分片文件来获取。在扫描列式分片文件之前,将列式分片文件的写入日志序列号范围与LN-read进行比较:
(1)如果列式分片文件中最小写入日志序列号大于LN-read,则跳过此列式分片文件;
(2)如果列式分片文件中最大写入日志序列号等于或小于LN-read,则整个列式分片文件中的数据对当前查询可见;
(3)列式分片文件中部分写入日志序列号等于或小于LN-read,则整个列式分片文件中的部分数据对当前查询可见。
在第(3)种情况下可以扫描此列式分片文件的所有数据的写入日志序列号列,并生成日志序列号指示位图,指示哪些行在读取版本中可见。同时可以获取该列式分片文件对应的删除Map,用于过滤掉列式分片文件中的已删除行。合并日志序列号指示位图和删除Map,即可确定哪些数据对当前查询可见。与行式存储形式下的读取不同,在列式存储形式下的读取中,每个列式分片文件可以独立读取,无需与其他级别的列式分片文件合并。举例来说,某一列式分片文件中的一个行组包含5条数据,其对应的删除Map可以简记为[1,1,0,0,0],即行组中前两条数据为被删除状态,而后三条数据为未被删除状态;其对应的日志序列号指示位图可以简记为[1,1,1,0,0],即其行组中前三条数据的写入日志序列号大于第二读取日志序列号,后两条数据的写入日志序列号不大于第二读取日志序列号。将删除Map和第二读取日志序列号取并集,得到最终位图为[1,1,1,0,0],即前三条数据对当前查询是不可见的,后两条数据对当前查询可见。
对于列式存储形式下的数据,插入操作包括Key、一组列值和LN-write,在系统的版本LN-write上执行插入操作,其中Key是文件ID,值是已删除行的行号。删除操作指定要删除的行的Key,通过它可以快速找到包含此行的列式分片文件ID以及该列式分片文件中该行的行号。更新操作实现为删除后插入。对列分级日志树和系统的插入可以触发第二内存表刷新和列式分片文件压缩。
进一步地,如图6所示,数据写入时首先查找主键索引文件中是否存在对应的主键:
(1)如果有对应的主键,即存在所针对的数据的索引信息,通过主键索引定位到对应的列式分片文件和行号,更新删除Map和主键索引。
(2)如果没有对应的主键,即不存在所针对的数据的索引信息,直接更新索引文件。
(3)数据写入第二内存表,并在第二内存表满了之后将数据刷新至列分级日志数。
下面通过一个示例对数据写入中的数据更新进行进一步说明,一个数据表的初始数据如下表1所示:
表1
id(标识) name(用户名) age(年龄)
0 用户1 10
1 用户2 11
2 用户3 12
现有写入操作,需要将user_1的name更新为用户3,如图7所示,该更新过程可以包括以下几个步骤:(1)基于id=user_1在主键索引中,查询到有主键id=1的记录。(2)通过主键中的索引信息定位原数据所在的文件。(3)通过主键id=1定位文件中的原数据。(4)更新删除Map中的删除标记为1。(5)更新主索引中的主键记录,即删除原来的id=1的记录,新增id=3的记录。(6)将更新后的数据写入该列式分片文件的元数据块中。
另外,本申请实施例采用分层缓存机制来降低I/O和计算成本。共有三层缓存,即本地磁盘缓存、块缓存和行缓存。每个分片对应于在分布式文件系统中存储的一组分片文件。本地磁盘缓存用于缓存存储在本地磁盘(SSD)中的分片文件,以减少文件系统中昂贵的I/O操作的频率。在SSD缓存的基础上,使用内存块缓存来存储最近从分片文件中读取的块。由于服务和分析工作负载具有非常不同的数据访问模式,因此我们在行分片和列分片的块高速缓存之间进行物理隔离。在块高速缓存之上,进一步维护内存行缓存,以存储最近在行式分片中进行点查找的合并结果。
图8为本申请实施例提供的一种混合事务分析系统中的数据处理装置的结构框图,如图8所示,该装置700可以包括:目标表组分片确定模块701、点查询结果获取模块702和列扫描结果获取模块703,其中:
目标表组分片确定模块701用于在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;
点查询结果获取模块702用于若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;
列扫描结果获取模块703用于若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
本申请提供的方案,在接收到查询请求时,对于事务处理任务对应的点查询请求,基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果,对于分析处理任务对应的列扫描请,基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果,由于该方案中同时提供了行式分片存储形式和列式分片存储形式,同时每条数据都通过不同的写入日志序列号区分了不同版本,在处理混合事务分析处理任务,能够避免数据冗余和复杂的数据同步,能够进行低时延的点查询和高吞吐量的列扫描,进而使得事务处理时延小,分析处理吞吐量大。
在本申请的一种可选实施例中,第一内存表和各行式分片文件中存储有各数据的删除标记,且第一内存表和各行式分片文件中的数据按键值连续存储,删除标记用于指示对应的数据是否被删除;
点查询结果获取模块具体用于:
获取第一内存表中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第一数据,并获取各行式分片文件中键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第二数据;
基于第一数据和第二数据的删除标记以及写入日志序列号,合并第一数据和第二数据,得到点查询结果。
在本申请的一种可选实施例中,各行式分片文件中包含有行式索引块和多个行式数据块,行式索引块中存储有各行式数据块中键值的索引,各行式数据块中的各数据按键值连续存储;
点查询结果获取模块进一步用于:
从各行式分片文件中确定包含有目标键值的目标行式分片文件;
对于每一目标行式分片文件,基于目标行式分片文件中的索引块中的索引信息,确定包含目标键值的目标行式数据块,并从目标行式数据块中获取键值与目标键值相同且写入日志序列号不大于第一读取日志序列号的第三数据;
将从各目标行式分片文件中获取的第三数据作为第二数据。
在本申请的一种可选实施例中,点查询结果获取模块进一步用于:
若第一数据和第二数据都为空,则确定点查询结果为空,若第一数据和第二数据不为空,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果;
获取第一数据和第二数据中最小的写入日志序列号对应的数据,若数据的删除标记指示数据被删除,则确定点查询结果为空,若数据的删除标记指示数据未被删除,则将第一数据和第二数据中最小的写入日志序列号对应的数据作为点查询结果。
在本申请的一种可选实施例中,该装置还包括行式写入模块,用于:
在获取到针对目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将写入日志序列号、第一写入请求对应的写入数据和删除标记存储至第一内存表中,其中,若第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除。
在本申请的一种可选实施例中,行式写入模块进一步用于:
在第一内存表中的数据量达到第一预设值时,将第一内存表中的数据写入到行分级日志树的最低层存储结构中,行分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个行式分片文件;
在行分级日志树的任一层存储结构中各行式分片文件的数据量达到第二预设值时,将该层存储结构中各行式分片文件合并后存储至更高一层的存储结构中。
在本申请的一种可选实施例中,第二内存表和各列式分片文件中的数据按列值连续存储;
列扫描结果获取模块具体用于:
获取第二内存表中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第四数据,并获取各列式分片文件中列值与目标列值相同且写入日志序列号不大于第二读取日志序列号的第五数据;
将第四数据和第五数据作为列扫描结果。
在本申请的一种可选实施例中,各列式分片文件中包含有列式索引块和多个列式数据块,列式索引块中存储有各列式数据块中列值的索引,各列式数据块中的各数据按列值连续存储;
列扫描结果获取模块进一步用于:
从各列式分片文件中确定包含有目标列值的目标列式分片文件,目标列式分片中的最大写入日志序列号不大于第二读取日志序列号,或者目标列式分片文件中有部分日志序列号不大于第二读取日志序列号,且目标列式分片文件中不包含被删除的数据;
对于每一目标列式分片文件,基于目标列式分片文件中的列式索引块中的索引信息,确定包含目标列值的目标列式数据块,并从目标列式数据块中获取列值与目标列值相同且写入日志序列号不大于第一读取日志序列号的第六数据;
将从各目标列式分片文件中获取的第六数据作为第五数据。
在本申请的一种可选实施例中,目标表组分片还包括数据删除指示位图,数据删除指示位图用于指示各列式分片文件中的各数据是否被删除;
列扫描结果获取模块进一步用于:
从各列式分片文件中获取包含有目标列值的第一列式分片文件;
对于每一第一列式分片文件,获取列式分片文件对应的日志序列号指示位图,并基于数据删除指示位图和日志序列号指示位图对第一列式分片文件中的数据进行筛选,得到对应的第二列式分片文件,日志序列号指示位图用于指示列式分片文件中各数据的写入日志序列号是否不大于第二读取日志序列号;
将各第一列式分片文件对应的第二列式分片文件作为目标列式分片文件。
在本申请的一种可选实施例中,目标表组分片还包含有主键索引,主键索引用于存储在各列式分片中已有的数据的索引信息;该装置还包括列式写入模块,用于:
在获取到针对目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若第二写入请求所针对的数据在主键索引中存在索引信息,则基于主键索引中的索引信息,将写入请求对应的写入数据和写入日志序列号写入数据所在的列式分片文件,并同步更新数据删除指示位图和主键索引;
若第二写入请求所针对的数据在主键索引中不存在索引信息,则直接将写入数据和写入日志序列号写入第二内存表,并同步更新主键索引。
在本申请的一种可选实施例中,列式写入模块进一步用于:
在第二内存表中的数据量达到第一预设值时,将第二内存表中的数据写入到列分级日志树的最低层存储结构中,列分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个列式分片文件;
在列分级日志树的任一层存储结构中各列式分片文件的数据量达到第二预设值时,将该层存储结构中各列式分片文件合并后存储至更高一层的存储结构中。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
下面参考图9,其示出了适于用来实现本申请实施例的电子设备(例如执行图2所示方法的终端设备或服务器)800的结构示意图。本申请实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)、可穿戴设备等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
电子设备包括:存储器以及处理器,存储器用于存储执行上述各个方法实施例所述方法的程序;处理器被配置为执行存储器中存储的程序。其中,这里的处理器可以称为下文所述的处理装置801,存储器可以包括下文中的只读存储器(ROM)802、随机访问存储器(RAM)803以及存储装置808中的至少一项,具体如下所示:
如图9所示,电子设备800可以包括处理装置(例如中央处理器、图形处理器等)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储装置808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM803中,还存储有电子设备800操作所需的各种程序和数据。处理装置801、ROM 802以及RAM803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
通常,以下装置可以连接至I/O接口805:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置806;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置807;包括例如磁带、硬盘等的存储装置808;以及通信装置809。通信装置809可以允许电子设备800与其他设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置809从网络上被下载和安装,或者从存储装置808被安装,或者从ROM 802被安装。在该计算机程序被处理装置801执行时,执行本申请实施例的方法中限定的上述功能。
需要说明的是,本申请上述的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块或单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一约束获取模块还可以被描述为“获取第一约束的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本申请的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行时实现如下情况:
在接收到查询请求时,确定查询请求对应的目标表组分片,目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,第一内存表、第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;若查询请求为事务处理任务对应的点查询请求,则基于写入日志序列号和点查询请求中的目标键值、第一读取日志序列号,从第一内存表和各行式分片文件中获取对应的点查询结果;若查询请求为分析处理任务对应的列扫描请求,则基于写入日志序列号和列扫描请求中的目标列值、第二读取日志序列号,从第二内存表和各列式分片文件中获取对应的列扫描结果。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (19)

1.一种混合事务分析系统中的数据处理方法,其特征在于,包括:
在接收到查询请求时,确定所述查询请求对应的目标表组分片,所述目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,所述第一内存表、所述第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;
若所述查询请求为事务处理任务对应的点查询请求,则基于所述写入日志序列号和所述点查询请求中的目标键值、第一读取日志序列号,从所述第一内存表和各行式分片文件中获取对应的点查询结果;
若所述查询请求为分析处理任务对应的列扫描请求,则基于所述写入日志序列号和所述列扫描请求中的目标列值、第二读取日志序列号,从所述第二内存表和各列式分片文件中获取对应的列扫描结果。
2.根据权利要求1所述的方法,其特征在于,所述第一内存表和各行式分片文件中存储有各数据的删除标记,且所述第一内存表和各行式分片文件中的数据按键值连续存储,所述删除标记用于指示对应的数据是否被删除;
所述基于所述写入日志序列号和所述点查询请求中的目标键值、第一读取日志序列号,从所述第一内存表和各行式分片文件中获取对应的点查询结果,包括:
获取所述第一内存表中键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第一数据,并获取各行式分片文件中键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第二数据;
基于所述第一数据和所述第二数据的删除标记以及写入日志序列号,合并所述第一数据和所述第二数据,得到所述点查询结果。
3.根据权利要求2所述的方法,其特征在于,各行式分片文件中包含有行式索引块和多个行式数据块,所述行式索引块中存储有各行式数据块中键值的索引,各行式数据块中的各数据按键值连续存储;
所述获取各行式分片文件中键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第二数据,包括:
从各行式分片文件中确定包含有所述目标键值的目标行式分片文件;
对于每一目标行式分片文件,基于所述目标行式分片文件中的索引块中的索引信息,确定包含所述目标键值的目标行式数据块,并从所述目标行式数据块中获取键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第三数据;
将从各目标行式分片文件中获取的第三数据作为所述第二数据。
4.根据权利要求2所述的方法,其特征在于,所述基于所述第一数据和所述第二数据的删除标记以及写入日志序列号,合并所述第一数据和所述第二数据,得到所述点查询结果,包括:
若所述第一数据和所述第二数据都为空,则确定所述点查询结果为空,若所述第一数据和所述第二数据不为空,则将所述第一数据和所述第二数据中最小的写入日志序列号对应的数据作为所述点查询结果;
获取所述第一数据和所述第二数据中最小的写入日志序列号对应的数据,若所述数据的删除标记指示所述数据被删除,则确定所述点查询结果为空,若所述数据的删除标记指示所述数据未被删除,则将所述第一数据和所述第二数据中最小的写入日志序列号对应的数据作为所述点查询结果。
5.根据权利要求2-4中任一项所述的方法,其特征在于,所述方法还包括:
在获取到针对所述目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将所述写入日志序列号、所述第一写入请求对应的写入数据和删除标记存储至所述第一内存表中,其中,若所述第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若所述第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述第一内存表中的数据量达到第一预设值时,将所述第一内存表中的数据写入到行分级日志树的最低层存储结构中,所述行分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个行式分片文件;
在所述行分级日志树的任一层存储结构中各行式分片文件的数据量达到第二预设值时,将该层存储结构中各行式分片文件合并后存储至更高一层的存储结构中。
7.根据权利要求1所述的方法,其特征在于,所述第二内存表和各列式分片文件中的数据按列值连续存储;
所述基于所述写入日志序列号和所述列扫描请求中的目标列值、第二读取日志序列号,从所述第二内存表和各列式分片文件中获取对应的列扫描结果,包括:
获取所述第二内存表中列值与所述目标列值相同且写入日志序列号不大于所述第二读取日志序列号的第四数据,并获取各列式分片文件中列值与所述目标列值相同且写入日志序列号不大于所述第二读取日志序列号的第五数据;
将所述第四数据和所述第五数据作为所述列扫描结果。
8.根据权利要求7所述的方法,其特征在于,各列式分片文件中包含有列式索引块和多个列式数据块,所述列式索引块中存储有各列式数据块中列值的索引,各列式数据块中的各数据按列值连续存储;
所述获取各列式分片文件中列值与所述目标列值相同且写入日志序列号不大于所述第二读取日志序列号第五的数据,包括:
从各列式分片文件中确定包含有所述目标列值的目标列式分片文件,所述目标列式分片中的最大写入日志序列号不大于所述第二读取日志序列号,或者所述目标列式分片文件中有部分日志序列号不大于所述第二读取日志序列号,且所述目标列式分片文件中不包含被删除的数据;
对于每一目标列式分片文件,基于所述目标列式分片文件中的列式索引块中的索引信息,确定包含所述目标列值的目标列式数据块,并从所述目标列式数据块中获取列值与所述目标列值相同且写入日志序列号不大于所述第一读取日志序列号的第六数据;
将从各目标列式分片文件中获取的第六数据作为所述第五数据。
9.根据权利要求8所述的方法,其特征在于,所述目标表组分片还包括数据删除指示位图,所述数据删除指示位图用于指示各列式分片文件中的各数据是否被删除;
所述从各列式分片文件中确定包含有所述目标列值的目标列式分片文件,包括:
从各列式分片文件中获取包含有所述目标列值的第一列式分片文件;
对于每一第一列式分片文件,获取所述列式分片文件对应的日志序列号指示位图,并基于所述数据删除指示位图和所述日志序列号指示位图对所述第一列式分片文件中的数据进行筛选,得到对应的第二列式分片文件,所述日志序列号指示位图用于指示所述列式分片文件中各数据的写入日志序列号是否不大于所述第二读取日志序列号;
将各第一列式分片文件对应的第二列式分片文件作为所述目标列式分片文件。
10.根据权利要求9所述的方法,其特征在于,所述目标表组分片还包含有主键索引,所述主键索引用于存储在各列式分片中已有的数据的索引信息,所述方法还包括:
在获取到针对所述目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若所述第二写入请求所针对的数据在所述主键索引中存在索引信息,则基于所述主键索引中的索引信息,将所述写入请求对应的写入数据和所述写入日志序列号写入所述数据所在的列式分片文件,并同步更新所述数据删除指示位图和所述主键索引;
若所述第二写入请求所针对的数据在所述主键索引中不存在索引信息,则直接将所述写入数据和所述写入日志序列号写入所述第二内存表,并同步更新所述主键索引。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在所述第二内存表中的数据量达到第一预设值时,将所述第二内存表中的数据写入到列分级日志树的最低层存储结构中,所述列分级日志树包含由低到高的多层存储结构,每层存储结构中包含至少一个列式分片文件;
在所述列分级日志树的任一层存储结构中各列式分片文件的数据量达到第二预设值时,将该层存储结构中各列式分片文件合并后存储至更高一层的存储结构中。
12.一种混合事务分析系统中的数据处理装置,其特征在于,包括:
目标表组分片确定模块,用于在接收到查询请求时,确定所述查询请求对应的目标表组分片,所述目标表组分片包含第一内存表、多个行式分片文件、第二内存表和多个列式分片文件,所述第一内存表、所述第二内存表、各行式分片文件和各列式分片文件中存储有目标表组中的数据和各数据的写入日志序列号;
点查询结果获取模块,用于若所述查询请求为事务处理任务对应的点查询请求,则基于所述写入日志序列号和所述点查询请求中的目标键值、第一读取日志序列号,从所述第一内存表和各行式分片文件中获取对应的点查询结果;
列扫描结果获取模块,用于若所述查询请求为分析处理任务对应的列扫描请求,则基于所述写入日志序列号和所述列扫描请求中的目标列值、第二读取日志序列号,从所述第二内存表和各列式分片文件中获取对应的列扫描结果。
13.根据权利要求12所述的装置,其特征在于,所述第一内存表和各行式分片文件中存储有各数据的删除标记,且所述第一内存表和各行式分片文件中的数据按键值连续存储,所述删除标记用于指示对应的数据是否被删除;
点查询结果获取模块具体用于:
获取所述第一内存表中键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第一数据,并获取各行式分片文件中键值与所述目标键值相同且写入日志序列号不大于所述第一读取日志序列号的第二数据;
基于所述第一数据和所述第二数据的删除标记以及写入日志序列号,合并所述第一数据和所述第二数据,得到所述点查询结果。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括行式写入模块,用于:
在获取到针对所述目标表组分片的事务处理任务对应的第一写入请求时,生成对应的写入日志序列号,并将所述写入日志序列号、所述第一写入请求对应的写入数据和删除标记存储至所述第一内存表中,其中,若所述第一写入请求为数据插入请求或数据更新请求,则对应的删除标记指示对应的数据未被删除,若所述第一写入请求为数据删除请求,则对应的删除标记指示对应的数据被删除。
15.根据权利要求12所述的装置,其特征在于,所述第二内存表和各列式分片文件中的数据按列值连续存储;
所述列扫描结果获取模块具体用于:
获取所述第二内存表中列值与所述目标列值相同且写入日志序列号不大于所述第二读取日志序列号的第四数据,并获取各列式分片文件中列值与所述目标列值相同且写入日志序列号不大于所述第二读取日志序列号的第五数据;
将所述第四数据和所述第五数据作为所述列扫描结果。
16.根据权利要求15所述的装置,其特征在于,所述目标表组分片还包含有主键索引,所述主键索引用于存储在各列式分片中已有的数据的索引信息,该装置还包括列式写入模块,用于:
在获取到针对所述目标表组分片的分析处理任务对应的第二写入请求时,生成对应的写入日志序列号;
若所述第二写入请求所针对的数据在所述主键索引中存在索引信息,则基于所述主键索引中的索引信息,将所述写入请求对应的写入数据和所述写入日志序列号写入所述数据所在的列式分片文件,并同步更新所述数据删除指示位图和所述主键索引;
若所述第二写入请求所针对的数据在所述主键索引中不存在索引信息,则直接将所述写入数据和所述写入日志序列号写入所述第二内存表,并同步更新所述主键索引。
17.一种电子设备,其特征在于,包括存储器和处理器;
所述存储器中存储有计算机程序;
所述处理器,用于执行所述计算机程序以实现权利要求1至9中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法。
19.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1至11中任一项所述的方法。
CN202311031898.4A 2023-08-15 2023-08-15 混合事务分析系统中的数据处理方法、装置及电子设备 Pending CN117056427A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311031898.4A CN117056427A (zh) 2023-08-15 2023-08-15 混合事务分析系统中的数据处理方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311031898.4A CN117056427A (zh) 2023-08-15 2023-08-15 混合事务分析系统中的数据处理方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN117056427A true CN117056427A (zh) 2023-11-14

Family

ID=88665829

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311031898.4A Pending CN117056427A (zh) 2023-08-15 2023-08-15 混合事务分析系统中的数据处理方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN117056427A (zh)

Similar Documents

Publication Publication Date Title
US11182356B2 (en) Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems
US10180946B2 (en) Consistent execution of partial queries in hybrid DBMS
US10360146B2 (en) Group garbage collection for multi-version concurrency control in database systems
EP3047397B1 (en) Mirroring, in memory, data from disk to improve query performance
US9606921B2 (en) Granular creation and refresh of columnar data
US10614050B2 (en) Managing object requests via multiple indexes
US9767131B2 (en) Hierarchical tablespace space management
US7418544B2 (en) Method and system for log structured relational database objects
EP3047400B1 (en) Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
US9779104B2 (en) Efficient database undo / redo logging
US9875024B2 (en) Efficient block-level space allocation for multi-version concurrency control data
CN111046034A (zh) 管理内存数据及在内存中维护数据的方法和系统
US10963440B2 (en) Fast incremental column store data loading
CN110309233A (zh) 数据存储的方法、装置、服务器和存储介质
US20180011897A1 (en) Data processing method having structure of cache index specified to transaction in mobile environment dbms
CN117056427A (zh) 混合事务分析系统中的数据处理方法、装置及电子设备
CN113051274B (zh) 一种海量标签存储系统及方法
CN115827653B (zh) 一种用于htap和海量数据的纯列式更新方法及装置
US20240095246A1 (en) Data query method and apparatus based on doris, storage medium and device
CN117112696A (zh) 数据同步的方法、装置、计算机设备及存储介质
CN114647630A (zh) 文件同步、信息生成方法、装置、计算机设备和存储介质
JP2024514672A (ja) アペンド専用データ構造を用いるリスト・ベースのデータ検索
CN117609177A (zh) 数据库操作方法、装置、设备及介质
CN115587090A (zh) 一种基于Doris的数据存储方法、装置、设备及介质
CN115905259A (zh) 一种支持行级并发控制的纯列式更新方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication