CN110990402B - 由行存储到列存储的格式转化方法、查询方法及装置 - Google Patents

由行存储到列存储的格式转化方法、查询方法及装置 Download PDF

Info

Publication number
CN110990402B
CN110990402B CN201911170878.9A CN201911170878A CN110990402B CN 110990402 B CN110990402 B CN 110990402B CN 201911170878 A CN201911170878 A CN 201911170878A CN 110990402 B CN110990402 B CN 110990402B
Authority
CN
China
Prior art keywords
column
data
database
row
hardware
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.)
Active
Application number
CN201911170878.9A
Other languages
English (en)
Other versions
CN110990402A (zh
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.)
Yusur Technology Co ltd
Original Assignee
Yusur Technology 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 Yusur Technology Co ltd filed Critical Yusur Technology Co ltd
Priority to CN201911170878.9A priority Critical patent/CN110990402B/zh
Publication of CN110990402A publication Critical patent/CN110990402A/zh
Application granted granted Critical
Publication of CN110990402B publication Critical patent/CN110990402B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; 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/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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Abstract

本发明提供了一种由行存储到列存储的格式转化方法、查询方法及装置,该格式转化方法包括:读取数据库结构体类型的行存储表数据,并将读取的行存储表数据存储至数据库结构体类型的表中;从结构体类型的表读取表总数和各表表名,解析数据库结构体类型的表中的各表,得到行存储表数据的各表的各列的列名和列数据类型,以及获取硬件解析所述数据库所需信息;根据表总数、表名、列名及列数据类型创建包含硬件解析数据库所需信息的设定列存储格式的列容器;以行为单位从解析后的行存储表数据的各表读取数据,并将以行为单位读取的数据存储至列容器中,得到列存储表数据。通过上述方案能够实现存储格式转化,提高硬件解析数据库的效率和速度。

Description

由行存储到列存储的格式转化方法、查询方法及装置
技术领域
本发明涉及数据存储技术领域,尤其涉及一种由行存储到列存储的格式转化方法、查询方法及装置。
背景技术
在信息时代,信息的存储、管理、查询、更新都非常重要。随着数据不断增多,数据库的存储量越来越大,每一次查询操作的时间会更长,总耗时不断增多。在实际应用场景中,数据的需求量都非常大,数据库通常需要应对实时的大规模并发查询,那么能否快速响应并返回并行计算结果,就显得尤为重要。
现有关系型数据库,如Oracle、DB2、MySQL、SQL SERVER,是采用行式存储法(Row-based)存储数据。在基于行式存储法存储数据的数据库中,数据是按照行数据为基础逻辑存储单元进行存储的,一行中的数据在存储介质中以连续存储形式存在,然后由数据库引擎根据每个查询提取需要的列。这种做法的缺点是必须每次处理一整行,而不是只处理自己需要的列。于此同时,行存储并不利于并行计算,会在需要处理大量数据的时候非常慢。
发明内容
本发明实施例提供了一种由行存储到列存储的格式转化方法、查询方法及装置,以实现存储格式转化,并便于数据库和硬件对接,从而提高硬件解析数据库的效率和速度。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种由行存储到列存储的格式转化方法,包括:
读取数据库结构体类型的行存储表数据,并将读取的所述行存储表数据存储至所述数据库结构体类型的表中;
从所述数据库结构体类型的表读取所述行存储表数据的表总数和各表表名;解析所述数据库结构体类型的表中的所述行存储表数据的各表,得到所述行存储表数据的各表的各列的列名和列数据类型;以及获取硬件解析所述数据库所需信息;
根据所述表总数、所述表名、所述列名、所述列数据类型及硬件解析所述数据库所需信息创建包含硬件解析所述数据库所需信息的设定列存储格式的列容器;
以行为单位从解析后的所述行存储表数据的各表读取数据,并将以行为单位读取的数据存储至所述列容器中,得到列存储表数据。
在一些实施例中,所述数据库结构体类型的表为User表。
在一些实施例中,解析所述数据库结构体类型的表中的所述行存储表数据的各表,包括:利用ODBC(Open Database Connectivity,开放数据库连接)中的函数解析所述数据库结构体类型的表中的所述行存储表数据的各表。
在一些实施例中,以行为单位从解析后的所述行存储表数据的各表读取数据,包括:利用ODBC中的next line函数以行为单位从解析后的所述行存储表数据的各表逐行读取数据。
在一些实施例中,所述硬件解析所述数据库所需信息包括总列数、写偏移量、读偏移量、各列列偏移量、各列总行数、及各列中各行数据长度。
在一些实施例中,所述硬件解析所述数据库所需信息还包括:各列列数据类型。
在一些实施例中,所述硬件解析所述数据库所需信息还包括:总字节数和各列总字节数。
在一些实施例中,各所述硬件解析所述数据库所需信息占4个字节。
在一些实施例中,所述设定列存储格式能够使得所述硬件在解析所述数据库时,先读取总列数、总字节数、写偏移量及读偏移量,再读取列偏移量,之后读取列总行数、列总字节数及列数据类型,然后读取列中行数据长度。
在一些实施例中,获取硬件解析所述数据库所需信息,包括:通过对行存储表数据进行统计计算得到解析所述数据库所需信息。
根据本发明实施例的另一个方面,提供了一种数据库查询方法,包括:
接收查询语句,并根据所述查询语句确定需要读取的数据库中结构体类型的行存储表数据;
利用上述实施例所述的格式转化方法将所述行存储表数据转化为列存储表数据;
利用硬件解析所述列存储表数据,并从解析后的所述列存储表数据读取所述查询语句所需数据;
根据读取的所述查询语句所需数据返回所述查询语句的查询结果。
根据本发明实施例的又一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
在一些实施例中,所述硬件为硬件加速器。
根据本发明实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
本发明实施例的由行存储到列存储的格式转化方法、数据库查询方法、电子设备及计算机可读存储介质,能够实现将数据库中行存储的表数据转化为列存储的表数据,减少数据查找冗余,提高数据查找速度。而且,通过创建包含硬件解析所述数据库所需信息的列存储格式的列容器来存储列数据,能够便于硬件解析转化得到的列存储格式的表数据,从而便于实现数据库与硬件对接,从而提高硬件解析数据库的效率和速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的由行存储到列存储的格式转化方法的流程示意图;
图2是本发明一实施例的数据库查询方法的流程示意图;
图3是本发明一实施例的由行存储到列存储的格式转化方法的流程示意图;
图4是本发明一具体实施例中列容器的存储格式的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
现在大多数数据库都是采取行式存储法,但在实际应用中我们会发现,行式数据库在读取数据时存在一个固有的缺陷,比如,所选择查询的目标即是只涉及少数几个字段,但由于这些目标数据埋藏在各行数据单元中,而行单元往往又特别大,应用程序必须读取每一条完整的行记录,从而使得读取效率大大较低,对此,行式数据库给出的优化方案是加索引,在OLTP类型的应用中,通过索引机制或给表分区等手段可以简化查询操作步骤,并提升查询效率。
但针对海量数据背景的OLAP应用(例如分布式数据库、数据仓库等),行存储的数据库就有些力不从心了,行式数据库建立索引和物化视图需要花费大量时间和资源,因此还是不划算的,无法从根本上解决查询性能和维护成本的问题,也不适用于数据仓库等应用场景,所以后来出现了基于列式存储的数据库。
对于数据仓库和分布式数据库来说,大部分情况下它会从各个数据源汇总数据,然后进行分析和反馈,其大多数操作是围绕同一个字段(属性)进行的,而当查询某属性的数据记录时,列式数据库只需返回与列属性相关的值。在大数据量查询场景中,列式数据库可在内存中高效组装各列的值,最终形成关系记录集,因此可以显著减少IO消耗并降低查询响应时间,非常适合数据仓库和分布式的应用。
对于SQL Server,可以将行存储表转换为聚集列存储索引,或创建非聚集列存储索引。若要转化为聚集列存储索引,可以先创建一个聚集列存储索引,并按列压缩和存储其中的所有数据。该索引包含表中的所有列,并且存储整个表。如果现有表是堆或聚集索引,则该表会转换为聚集列存储索引。如果该表已作为聚集列存储索引存储,则会删除并重新生成现有索引。若要转化为非聚集列存储索引,该索引可以具有经过筛选的条件,并且不需要包含基础表的所有列。列存储索引需要足够的空间来存储数据副本。它是可更新的,在基础表发生更改时会进行更新。聚集索引上的非聚集列存储索引可启用实时分析。
而上述SQL Server的列转化格式只适用于CPU(Central Processing Unit,中央处理器)场景,很难和硬件对接。发明人经过研究发现,因为硬件很难解析数据库里的一些结构体等复杂数据类型,而且解析效率也不高,进一步研究发现,硬件在解析时,需要知道数据的长度、总数等信息,而上述列存储方式并没有直接记录硬件解析所需的这些信息,所以导致硬件解析时会有效率低、速度慢等问题。
基于上述发现,本发明提供了一种由行存储到列存储的格式转化方法,能够实现存储格式转化,并能便于数据库和硬件对接,从而提高硬件解析数据库的效率和速度。
图1是本发明一实施例的由行存储到列存储的格式转化方法的流程示意图。如图1所示,该格式转化方法可包括如下步骤S110至步骤S140。
下面将对各步骤的具体实施方式进行详细说明。
步骤S110:读取数据库结构体类型的行存储表数据,并将读取的所述行存储表数据存储至所述数据库结构体类型的表中。
数据库以结构体形式存储数据,对于以行存储格式存储表数据的数据库,从数据库直接读取得到的表数据为该数据库的结构体类型的行存储表数据。直接读取的结构体类型的行存储表数据可以直接存储在结构体类型的表中。其中,该结构体类型的表可以是根据该数据库的结构体类型在内存中临时开辟空间得到的表。例如,数据库结构体类型的表为User表,其中,User表为现有的表,具有与数据库中结构体类型的行存储表具有相同或类似的表结构。另外,在进行数据库查询时,可以一次从该数据库读取出所有所需的结构体类型的行存储表数据,或者,一次只读取部分所需表数据,经后续步骤转换成列存储格式的表数据后,再继续读取其他表数据进行格式转换,直到所有表数据的存储格式转换完成。
步骤S120:从所述数据库结构体类型的表读取所述行存储表数据的表总数和各表表名;解析所述数据库结构体类型的表中的所述行存储表数据的各表,得到所述行存储表数据的各表的各列的列名和列数据类型;以及获取硬件解析所述数据库所需信息。
上述数据库结构体类型的表中存储了数据库结构体类型的行存储表数据,从数据库结构体类型的行存储表数据中可以直接获得这些行存储表数据的表的总数以及各个表的表名。可以利用各种方法对上述数据库结构体类型的表中的行存储表数据的各表进行解析得到各表的各列的列名和各列的列数据类型。其中,该列数据类型,例如,可以指是该列数据为整型、浮点型、时间类型等的数据。
示例性地,可以利用ODBC中的函数解析所述数据库结构体类型的表中的所述行存储表数据的各表。在此情况下,上述数据库结构体类型的表可以为User表。
在其他实施例中,可以利用JDBC(Java Data Base Connectivity,java数据库连接)中的函数解析所述数据库结构体类型的表中的所述行存储表数据的各表。
步骤S130:根据所述表总数、所述表名、所述列名、所述列数据类型及硬件解析所述数据库所需信息创建包含硬件解析所述数据库所需信息的设定列存储格式的列容器。
该列容器中包含的表的总个数可以根据所述表总数确定,列容器中各表的表名可以根据所述表名确定,列容器中各表的各列的列名可以根据所述列名确定,列容器中各表中各列的列数据类型可以根据所述列数据类型确定。
列容器除了可以包含表总数、表名、列名及列数据类型的信息,还可以包含硬件解析所述数据库所需信息,其中,该硬件解析所述数据库所需信息可以是在创建列容器过程中通过解析、读取、统计等方式得到。
示例性地,该步骤S120中,获取硬件解析所述数据库所需信息的具体实施方式,可包括:通过对行存储表数据进行统计计算得到解析所述数据库所需信息。其中,该行存储表数据可以是SQL语句取出的所需的数据,可以解析前的结构体类型的数据,或解析后的数据。例如,行数、列数的相关信息可以通过统计得到的,偏移量、字节数、数据长度的相关信息可以通过计算得到。
利用本发明各实施例的方法将行存储格式的表数据转换为列存储格式的表数据之后,该列存储格式的表数据可以传输至硬件,由硬件解析后进行一些处理,那么,该步骤S130中所述的硬件可以是指该种硬件。例如,该硬件可以是硬件加速器,该硬件加速器可以是FPGA(Field-Programmable Gate Array),现场可编程门阵列)、GPU(GraphicsProcessing Unit,图形处理器)等。该设定列存储格式所包含的硬件解析所述数据库所需信息可以是指硬件解析转换成的列存储格式的表数据所需的信息,根据硬件的不同,解析所述数据库所需信息可以不同。
例如,所述硬件解析所述数据库所需信息可包括总列数、写偏移量、读偏移量、各列列偏移量、各列总行数、及各列中各行数据长度。其中,总列数可以是指列容器中存放列数的总和,可供硬件在解析时直接获取该总列数,从而确定解析得到所有列。写偏移量可以用于记录各个列偏移量的信息所在的位置,以便硬件在解析时需要定位每列位置时直接取到该列偏移量信息。该读偏移量可以用于当硬件读取数据进行处理时记录硬件当前读取的数据的位置的信息,读偏移量随当前数据的位置的变化而不同,可以由该硬件根据当前读取数据的位置进行更改。该读偏移量所占的字节可以初始化为0,之后可以占一定字节,例如,4个字节。列偏移量可以用于存储列的位置,可以便于硬件在解析时需要定位列位置时直接得到列的位置信息。列总行数可以用于存储一列中的数据的总行数,可以便于硬件在解析时需要确认已读取完一列的所有行时直接得到该总行数信息。行数据长度可以用于存储一列中一行数据的长度信息,可以便于硬件在解析该列该行时需要确认是否读取完该列该行数据时获取还信息。
总列数、各列总行数可以通过对行存储表数据统计得到,写偏移量、读偏移量、各列列偏移量、及各列中各行数据长度可以通过根据行存储表数据进行计算得到。
该实施例中,通过上述信息,硬件在解析时,无需索引,就可以完成数据解析,能够高效查找数据。
再例如,所述硬件解析所述数据库所需信息除了包括总列数、写偏移量、读偏移量、各列列偏移量、各列总行数、及各列中各行数据长度,还可包括:列数据类型。其中,列数据类型可以用于存储一列的数据的类型,可以便于硬件在解析时需要确认列数据类型时获取该信息。列数据类型可以通过直接读取得到。
该实施例中,因数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,从而提高物理存储利用率。
又例如,所述硬件解析所述数据库所需信息除了包括总列数、写偏移量、读偏移量、各列列偏移量、各列总行数、及各列中各行数据长度,可包括列数据类型,还可包括总字节数和列总字节数。其中,该总字节数可以是指列容器中存放的数据所占字节数的总和,可供硬件在解析时需要确认已解析完所有数据获取该总字节数信息。列总字节数可以用于存储一列的所有数据所占字节数的总和,可以便于硬件在解析时需要确认读取该列所有行数据时获取该列总字节数的信息。该实施例中,硬件在解析时通过总字节数可以确认所有数据是否解析完整或正确,通过列总字节数可以确认一列数据是否解析完整或正确。总字节数和列总字节数可以通过对对行存储表数据统计得到。
列容器中各硬件解析所述数据库所需信息可以包含字段名称(如,总列数、写偏移量、读偏移量、列偏移量、总行数、数据长度、数据类型、总字节数、列总字节数)和字段的值。字段的值可以通过统计计算得到。
上述各所需信息可以是根据依据查询语句确定的表数据在创建列容器的过程中进行统计计算或从表数据中读取得到。
所述硬件解析所述数据库所需各信息可以根据各信息的情况进行确定。例如,各所述硬件解析所述数据库所需信息可以是占4个字节,即,每种信息占4个字节的存储空间。
该设定列存储格式中各信息的相对位置可以根据硬件在解析数据库(表数据)时解析各信息的顺序确定。在一些实施中,所述设定列存储格式能够使得所述硬件在解析所述数据库时,先读取总列数、总字节数、写偏移量及读偏移量,再读取列偏移量,之后读取列总行数、列总字节数及列数据类型,然后读取列中行数据长度。以此依次读取信息,可使设置该设定列存储格式中各信息的相对位置可以便于硬件正确、快速解析列式存储表数据。
步骤S140:以行为单位从解析后的所述行存储表数据的各表读取数据,并将以行为单位读取的数据存储至所述列容器中,得到列存储表数据。
例如,以行为单位从解析后的所述行存储表数据的各表读取数据的具体实施方式,可包括:利用ODBC中的next line函数以行为单位从解析后的所述行存储表数据的各表逐行读取数据。
另外,本发明实施例还提供了一种数据库查询方法,如图2所示,该数据库查询方法可包括以下步骤:
步骤S210:接收查询语句,并根据所述查询语句确定需要读取的数据库中结构体类型的行存储表数据;
步骤S220:利用上述各实施例所述的格式转化方法将所述行存储表数据转化为列存储表数据;
步骤S230:利用硬件解析所述列存储表数据,并从解析后的所述列存储表数据读取所述查询语句所需数据;
步骤S240:根据读取的所述查询语句所需数据返回所述查询语句的查询结果。
上述步骤S210,该查询语句可以为SQL语句,根据该查询语句可以在数据库中找到需要读取的数据表。上述步骤S220,该格式转化方法可以参照上述各实施例的所述的由行存储到列存储的格式转化方法实施,顾不赘述。上述步骤S230中,可以利用硬件(如,硬件加速器)加速对读取的数据进行加速处理,例如,排序、聚合等。上述步骤S240中,可以根据硬件(如,硬件加速器)返回处理结果,从而由数据库返回查询结果给用户。
此外,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述各实施例所述的由行存储到列存储的格式转化方法或数据库查询方法的步骤。
在一些实施例中,所述的电子设备中,所述硬件可以为硬件加速器。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述各实施例所述的由行存储到列存储的格式转化方法或数据库查询方法的步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
图3是本发明一实施例的由行存储到列存储的格式转化方法的流程示意图。参见图3,一实施例的由行存储到列存储的格式转化方法可包括以下过程。
首先,将需要转换为列存储的数据进行读取和解析。读取表数据的时候,先取到User表,读出表的总数和每个表的表名,以便分配到对应的列式数据中。进一步对每个表进行解析,使用ODBC自带的函数得到每一列的列名和类型。在取数据时,利用ODBC提供的nextline函数逐行读取数据,以每行为单位取出。至此,行存储转换成列存储所需的数据都已取得。
接着,开始创建列存储。先进行内存构建,根据前面得到的表和列信息创建一个列容器,再将表数据内容填充进去。然后将取得的数据每行依次存储进列容器,按照专门设计的存储格式将列容器填满,则完成行存储到列存储的转化过程。
简言之,由行存储到列存储的格式转化方法,包括以下步骤:
(1)读取数据库中的表数据,存到User表;
(2)从User表读出表数据的表的总数和每个表的表名;
(3)使用ODBC自带的函数对User表中的表数据的每个表进行解析,得到每一列的列名和类型;
(4)利用ODBC提供的next line函数逐行从解析每列读取数据,并以行为单位取出;
(5)创建列存储(构建内存):根据步骤(2)得到的表信息和步骤(3)得到的列信息创建一个列容器;
(6)将表数据内容填充到列容器:将步骤(4)取得的数据的每行依次存储进列容器,按设计好的存储格式将列容器填满。
ODBC的表数据本身没有长度信息,使得硬件解析起来比较困难,效率低下。同时硬件在定位目标数据的时候比较困难,有偏移量作为参考,效率会得到很大的提升。将硬件解析数据库所需的信息都直接存储到列式数据中,使得解析速度大大加快,效率提高,从而加速并行计算,使得查询过程更为高效。
图4是本发明一具体实施例中列容器的存储格式的结构示意图。按照设定存储格式将所有的行存储数据存入列容器,即可完成格式转换,得到列式数据。参见图4,一具体实施例中,列存储格式可如下:
图4中第一行为表数据的存储结构,其包括:总列数、总字节数、读偏移量、写偏移量、列x(x为正整数,如,列1、列2)及列x偏移量(如,列1偏移量、列2偏移量)。其中:“总列数”占4字节,用于存放列数总和,供硬件解析时直接获取总列数;“总字节数”占4字节,用于存放数据所占字节数之和;“读偏移量”占4字节,初始化为0,用于供硬件加速器记录当前读数据位置对应的偏移量,随位置变化由硬件加速器更改;“写偏移量”占4字节,用于给定“列x偏移量”(如“列1偏移量”)所在位置对应的偏移量,方便硬件在定位每列位置时直接取用;“列x”依次存放每一列的数据,图4中第二行为列x(如列1)的展开结构;每个列x偏移量占4字节,对应列的顺序,存放每一列对应位置的偏移量。其中,总列数、总字节数、读偏移量、写偏移量的顺序可以调换。
再参见图4,取其中一列数据展开来看,一列包括:总行数、总字节数、类型、行y(y为正整数,如,行1、行2)。其中:“总行数”占4字节,用于存放行数总和,供硬件解析时直接获取总行数;“总字节数”占4字节,用于存放数据所占字节数之和;“类型”占4字节,存放这一列数据对应的类型;“行y”依次存放每一列对应此列的数据,图4中第三行为一行的展开结构。更进一步地,取其中一行展开来看,一列中的一行包括长度y和数据y,其中,“长度y”占4字节,用于依次存放每个数据的长度;“数据y”位于长度后方,用于对应存放数据本身。
其中,列容器的存储格式中的各信息可以在SQL语句取出需要的数据后通过代码统计相应数据得到。
列存储的优势是在读取过程,不会产生冗余数据。查询过程中,可针对各列的运算并发执行(SMP),在内存中聚合完整记录集,可能降低查询响应时间;同时可在数据列中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中能够尽量减少无关输入输出(IO),避免全表扫描;因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。
相对于针对CPU设计的列式存储,本实施例的格式转化方法易于硬件加速数据库的高效表转化格式,在列式结构中存储硬件解析数据库所需的信息,硬件即可在解析过程中直接取用数据,高效便捷,使得解析速度大大加快。从而加速数据库并行计算,使得查询过程更为高效,通过硬件加速数据库操作。简言之,本实施例面向硬件进行设计,使得转化后的格式可以方便硬件解析;根据表数据的存储形式,可以直接取用总列数和总行数等信息,使硬件解析效率得到提高;列式结构中记录列偏移量和读写偏移量,能够方便查找、定位;每个数据之前记录长度,能够方便数据的读取。
综上所述,本发明实施例的由行存储到列存储的格式转化方法、数据库查询方法、电子设备及计算机可读存储介质,通过读取数据库结构体类型的行存储表数据,并将读取的所述行存储表数据存储至所述数据库结构体类型的表中,从所述数据库结构体类型的表读取所述行存储表数据的表总数和各表表名,解析所述数据库结构体类型的表中的所述行存储表数据的各表,得到所述行存储表数据的各表的各列的列名和列数据类型,以及获取硬件解析所述数据库所需信息,根据所述表总数、所述表名、所述列名、所述列数据类型及硬件解析所述数据库所需信息创建包含硬件解析所述数据库所需信息的设定列存储格式的列容器,以及以行为单位从解析后的所述行存储表数据的各表读取数据,并将以行为单位读取的数据存储至所述列容器中,得到列存储表数据,能够实现将数据库中行存储的表数据转化为列存储的表数据,减少数据查找冗余,提高数据查找速度。而且,通过创建包含硬件解析所述数据库所需信息的列存储格式的列容器来存储列数据,能够便于硬件解析转化得到的列存储格式的表数据,从而便于实现数据库与硬件对接,从而提高硬件解析数据库的效率和速度。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种由行存储到列存储的格式转化方法,其特征在于,包括:
读取数据库结构体类型的行存储表数据,并将读取的所述行存储表数据存储至所述数据库结构体类型的表中;
从所述数据库结构体类型的表读取所述行存储表数据的表总数和各表表名;解析所述数据库结构体类型的表中的所述行存储表数据的各表,得到所述行存储表数据的各表的各列的列名和列数据类型;以及获取硬件解析所述数据库所需信息;
根据所述表总数、所述表名、所述列名、所述列数据类型及硬件解析所述数据库所需信息创建包含硬件解析所述数据库所需信息的设定列存储格式的列容器;
以行为单位从解析后的所述行存储表数据的各表读取数据,并将以行为单位读取的数据存储至所述列容器中,得到列存储表数据。
2.如权利要求1所述的由行存储到列存储的格式转化方法,其特征在于,所述数据库结构体类型的表为User表。
3.如权利要求2所述的由行存储到列存储的格式转化方法,其特征在于,解析所述数据库结构体类型的表中的所述行存储表数据的各表,包括:
利用ODBC中的函数解析所述数据库结构体类型的表中的所述行存储表数据的各表。
4.如权利要求3所述的由行存储到列存储的格式转化方法,其特征在于,以行为单位从解析后的所述行存储表数据的各表读取数据,包括:
利用ODBC中的next line函数以行为单位从解析后的所述行存储表数据的各表逐行读取数据。
5.如权利要求1至4任一项所述的由行存储到列存储的格式转化方法,其特征在于,所述硬件解析所述数据库所需信息包括总列数、写偏移量、读偏移量、各列列偏移量、各列总行数、及各列中各行数据长度。
6.如权利要求5所述的由行存储到列存储的格式转化方法,其特征在于,所述硬件解析所述数据库所需信息还包括:各列列数据类型。
7.如权利要求6所述的由行存储到列存储的格式转化方法,其特征在于,所述硬件解析所述数据库所需信息还包括:总字节数和各列总字节数。
8.如权利要求5所述的由行存储到列存储的格式转化方法,其特征在于,各所述硬件解析所述数据库所需信息占4个字节。
9.如权利要求7所述的由行存储到列存储的格式转化方法,其特征在于,所述设定列存储格式能够使得所述硬件在解析所述数据库时,先读取总列数、总字节数、写偏移量及读偏移量,再读取列偏移量,之后读取列总行数、列总字节数及列数据类型,然后读取列中行数据长度。
10.如权利要求7所述的由行存储到列存储的格式转化方法,其特征在于,获取硬件解析所述数据库所需信息,包括:
通过对行存储表数据进行统计计算得到解析所述数据库所需信息。
11.一种数据库查询方法,其特征在于,包括:
接收查询语句,并根据所述查询语句确定需要读取的数据库中结构体类型的行存储表数据;
利用如权利要求1至10任一项所述的格式转化方法将所述行存储表数据转化为列存储表数据;
利用硬件解析所述列存储表数据,并从解析后的所述列存储表数据读取所述查询语句所需数据;
根据读取的所述查询语句所需数据返回所述查询语句的查询结果。
12.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至11任一项所述方法的步骤。
13.如权利要求12所述的电子设备,其特征在于,所述硬件为硬件加速器。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至11任一项所述方法的步骤。
CN201911170878.9A 2019-11-26 2019-11-26 由行存储到列存储的格式转化方法、查询方法及装置 Active CN110990402B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911170878.9A CN110990402B (zh) 2019-11-26 2019-11-26 由行存储到列存储的格式转化方法、查询方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911170878.9A CN110990402B (zh) 2019-11-26 2019-11-26 由行存储到列存储的格式转化方法、查询方法及装置

Publications (2)

Publication Number Publication Date
CN110990402A CN110990402A (zh) 2020-04-10
CN110990402B true CN110990402B (zh) 2020-11-13

Family

ID=70086907

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911170878.9A Active CN110990402B (zh) 2019-11-26 2019-11-26 由行存储到列存储的格式转化方法、查询方法及装置

Country Status (1)

Country Link
CN (1) CN110990402B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625585B (zh) * 2020-05-22 2021-08-31 中科驭数(北京)科技有限公司 硬件加速数据库的访问方法、装置、主机及存储介质
CN115470235A (zh) * 2021-06-11 2022-12-13 华为技术有限公司 一种数据处理方法、装置以及设备
CN114647635B (zh) * 2022-03-31 2024-01-23 苏州浪潮智能科技有限公司 数据处理系统
WO2023216575A1 (zh) * 2022-05-11 2023-11-16 华为技术有限公司 数据页处理的方法及其装置
CN115438114B (zh) * 2022-11-09 2023-03-24 浪潮电子信息产业股份有限公司 存储格式转换方法、系统、装置、电子设备及存储介质
CN116302178B (zh) * 2023-02-23 2023-10-20 合肥申威睿思信息科技有限公司 一种列存数据的加速处理方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160078085A1 (en) * 2014-09-17 2016-03-17 Futurewei Technologies, Inc. Method and system for adaptively building and updating a column store database from a row store database based on query demands
US9412208B2 (en) * 2014-10-09 2016-08-09 Wrap Media, LLC Generating and delivering a wrap package of cards including custom content and/or services in response to a vehicle diagnostic system triggered event
CN106874437B (zh) * 2017-02-04 2019-08-23 中国人民大学 面向数据库一体机的内存数据仓库行列存储转换实现方法
CN107818155A (zh) * 2017-10-27 2018-03-20 许继电气股份有限公司 一种配电主站及配电主站数据的存储方法
EP3543882B8 (en) * 2018-02-12 2021-11-24 Easycerti Inc. Method and system for identifying original data by using data order

Also Published As

Publication number Publication date
CN110990402A (zh) 2020-04-10

Similar Documents

Publication Publication Date Title
CN110990402B (zh) 由行存储到列存储的格式转化方法、查询方法及装置
US11880371B2 (en) Unified table query processing
US11762876B2 (en) Data normalization using data edge platform
US10860553B2 (en) Multi-level storage architecture
US10534764B2 (en) Partial merge
US9594799B2 (en) Logless atomic data movement
US10380269B2 (en) Sideways information passing
US10162766B2 (en) Deleting records in a multi-level storage architecture without record locks
CN107092627B (zh) 记录的列状存储表示
US20230103328A1 (en) Data compression techniques
US20200293545A1 (en) Data storage method and apparatus, server, and storage medium
CN112685446B (zh) 通过Elasticsearch数据库的复杂SQL查询方法、装置、处理器及存储介质
US20130290287A1 (en) Executing user-defined function on a plurality of database tuples
Kvet et al. Relational pre-indexing layer supervised by the DB_index_consolidator Background Process
CN115827660B (zh) 数据更新方法、装置、电子设备及非易失性存储介质
US11734282B1 (en) Methods and systems for performing a vectorized delete in a distributed database system
CN112182028A (zh) 基于分布式数据库的表的数据行数查询方法和装置
CN116383314A (zh) 一种关系数据库的模式和元组级别起源数据存储方法
Ramsak Towards a general-purpose, multidimensional index: Integration, Optimization and Enhancement of UB-Trees
CN117648385A (zh) 适用于多维数据库的内外存压缩及元组更新插入方法
CN116401245A (zh) 一种数据索引构建方法及系统
Richardson Disambiguating Databases: Use the database built for your access model.
JPH03271840A (ja) スケジュール生成装置

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
GR01 Patent grant
GR01 Patent grant