一种海量标签存储系统及方法转让专利

申请号 : CN202110349755.2

文献号 : CN113051274B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱晓峰蔡晓华

申请人 : 上海天旦网络科技发展有限公司

摘要 :

本发明提供了一种海量标签存储系统及方法,包括以下模块:接口模块:使用类SQL语法操作系统,用于元数据管理,数据修改及查询;数据写入模块:用于写入列数据,重复时会忽略该列数据;数据更新模块:用于更新列数据,不存在时会忽略该列数据;数据删除模块:用于数据删除;数据查询模块:用于查询和统计数据;底层数据结构模块:用于持久化保存数据。本系统按需获取列信息,并提供基于列的更新和删除逻辑,实现存储海量标签;使用列式存储和向量化执行,以及基于行的少量更新和基于列的批量更新策略,实现标签的更新和快速查询。

权利要求 :

1.一种海量标签存储系统,其特征在于,包括以下模块:接口模块:使用类SQL语法操作系统,用于元数据管理,数据修改及查询;

数据写入模块:用于写入列数据,重复时会忽略该列数据;

数据更新模块:用于更新列数据,不存在时会忽略该列数据;

数据删除模块:用于数据删除;

数据查询模块:用于查询和统计数据;

底层数据结构模块:用于持久化保存数据;

所述数据查询模块具体步骤如下:

步骤s601:数据查询过程;

步骤s602:数据关联操作;

步骤s603:查询未合并数据;

所述步骤s601包括:

步骤s6011:解析查询语句后构造出执行计划,通过代价优化器以及启发式优化器优化后执行;

步骤s6012:部分过滤操作会由启发式优化器下推到数据读取操作中进行;

步骤s6013:数据读取对数据进行分片,粒度是行组级别,由分片策略确定,默认会把连续的行组分配到一个分片中;

步骤s6014:内存中的数据如果还未刷新到磁盘,则作为单独的一个分片读取,可使用参数设置是否在查询时使用这部分数据;

步骤s6015:每个操作都有分片信息,不同分片会并行执行,操作优先使用调用SIMD指令集向量化执行;

步骤s6016:不同操作都有分片策略,大多数操作不主动重新分片,对于一些操作,包括排序或关联,会按照该操作的分片策略重新对数据分片;

所述数据写入模块具体步骤如下:

步骤s301:数据写入内存中以列式的方式排列,同时写入WAL日志文件;

步骤s302:定时定量刷新到磁盘,数据写入时会计算分区ID,若分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;

步骤s303:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件;

所述数据更新模块具体操作如下:

步骤s401:数据更新时先写入内存,同时写入WAL日志文件;

步骤s402:定时定量刷新到磁盘,数据写入时会计算分区ID;更新操作会判断如果分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;

步骤s403:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件;

步骤s404:采用数据写入的方法进行数据更新,不同之处是更新文件无法查询,只有当合并后才会生效;

所述步骤s602包括以下步骤:

步骤s6021:先对需要关联的数据列创建索引,该索引记录每个分片内的每个行组的最大值和最小值;

步骤s6022:当对两个表进行关联操作时,关联键信息会在执行计划阶段通知到关联的内部操作中;

步骤s6023:数据读取操作会根据以上信息,调整分片逻辑,尽量保证连续的关联键在一个分片中;

步骤s6024:关联操作的分片策略根据这些信息,调整每个分片操作的输入数据;

步骤s6025:在分布式场景下,当关联键和表的分布ID一致时,关联操作不会产生额外的网络开销;否则分片逻辑会按照最优策略处理关联分片。

2.根据权利要求1所述的一种海量标签存储系统,其特征在于:所述接口模块包括以下子模块:数据定义语法模块:用于定义数据的结构;包括CREATE、DROP、ALTER三个操作;

数据写入语法模块:用于写入和更新列数据;包括INSERT、UPDATE两个操作;

数据查询语法模块:用于查询和统计数据;包括SELECT操作。

3.根据权利要求1所述的一种海量标签存储系统,其特征在于:所述数据删除模块具体实现如下:步骤s501:数据删除和更新的流程一致;

步骤s502:当需要删除操作实时生效时,执行操作包括直接删除分区和直接删除列数据。

4.根据权利要求1所述的一种海量标签存储系统,其特征在于:所述底层数据结构模块具体实现如下:步骤s701:配置select*时返回的字段,支持该场景不返回所有字段;其他字段的查询能够在语句中显示应用;

步骤s702:列状态;

步骤s703:表结构更新。

5.一种海量标签存储方法,其特征在于,包括以下步骤:步骤s1:接口操作,使用类SQL语法操作系统,用于元数据管理,数据修改及查询;

步骤s2:数据写入操作,用于写入列数据,重复时会忽略该列数据;

步骤s3:数据更新操作,用于更新列数据,不存在时会忽略该列数据;

步骤s4:数据删除操作,用于数据删除;

步骤s5:数据查询操作,用于查询和统计数据;

步骤s6:底层数据结构操作,用于持久化保存数据;

所述数据查询操作具体步骤如下:

步骤s601:数据查询过程;

步骤s602:数据关联操作;

步骤s603:查询未合并数据;

所述步骤s601包括:

步骤s6011:解析查询语句后构造出执行计划,通过代价优化器以及启发式优化器优化后执行;

步骤s6012:部分过滤操作会由启发式优化器下推到数据读取操作中进行;

步骤s6013:数据读取对数据进行分片,粒度是行组级别,由分片策略确定,默认会把连续的行组分配到一个分片中;

步骤s6014:内存中的数据如果还未刷新到磁盘,则作为单独的一个分片读取,可使用参数设置是否在查询时使用这部分数据;

步骤s6015:每个操作都有分片信息,不同分片会并行执行,操作优先使用调用SIMD指令集向量化执行;

步骤s6016:不同操作都有分片策略,大多数操作不主动重新分片,对于一些操作,包括排序或关联,会按照该操作的分片策略重新对数据分片;

所述数据写入模块具体步骤如下:

步骤s301:数据写入内存中以列式的方式排列,同时写入WAL日志文件;

步骤s302:定时定量刷新到磁盘,数据写入时会计算分区ID,若分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;

步骤s303:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件;

所述数据更新模块具体操作如下:

步骤s401:数据更新时先写入内存,同时写入WAL日志文件;

步骤s402:定时定量刷新到磁盘,数据写入时会计算分区ID;更新操作会判断如果分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;

步骤s403:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件;

步骤s404:采用数据写入的方法进行数据更新,不同之处是更新文件无法查询,只有当合并后才会生效;

所述步骤s602包括以下步骤:

步骤s6021:先对需要关联的数据列创建索引,该索引记录每个分片内的每个行组的最大值和最小值;

步骤s6022:当对两个表进行关联操作时,关联键信息会在执行计划阶段通知到关联的内部操作中;

步骤s6023:数据读取操作会根据以上信息,调整分片逻辑,尽量保证连续的关联键在一个分片中;

步骤s6024:关联操作的分片策略根据这些信息,调整每个分片操作的输入数据;

步骤s6025:在分布式场景下,当关联键和表的分布ID一致时,关联操作不会产生额外的网络开销;否则分片逻辑会按照最优策略处理关联分片。

说明书 :

一种海量标签存储系统及方法

技术领域

[0001] 本发明涉及海量数据处理领域,具体地,涉及一种海量标签存储系统及方法。

背景技术

[0002] 联机分析处理(OLAP)是计算机技术中快速解决多维分析问题的一种主要方法,在销售业务报告、市场营销、业务流程管理、预算和预测、财务报表以及类似领域有着广泛的商业应用。近年来随着人工智能的兴起,OLAP更是在大数据和数据挖掘等方面有着更多的实践和应用,是当前举足轻重的技术手段。
[0003] 在公告号为CN107092529B的中国发明专利文件中,提供了一种OLAP服务系统,一种OLAP服务代理方法、装置及电子设备,以及一种OLAP服务方法、装置及电子设备,涉及联机分析处理技术领域。其中,所述OLAP服务系统包括OLAP服务代理装置和多个OLAP服务装置,当OLAP服务的客户端提交查询请求后,通过OLAP服务代理装置接收该请求,并从多个OLAP服务装置中选取一个OLAP服务装置,作为处理该请求的OLAP服务装置,然后将该请求转发至被选取的OLAP服务装置。该发明实施例提供的技术方案,可以有效提高OLAP服务的查询性能及可靠性,从而达到提高OLAP服务可用性的效果。
[0004] 现有OLAP系统一般通过大宽表的方式,减少关联的性能消耗,同时使用列式存储来优化查询性能。但是这种方式往往很难进行数据的更新操作,列式存储的关联问题也没有很好的解决方案。为了解决更新问题一些系统尝试使用两种不同的存储来处理更新和查询,这提升了架构的复杂性,并且降低了实时性。尽管有一些尝试解决数据更新问题的系统,比如Kudu的出现,但是这些问题仍然存在。
[0005] 另外,数据关联查询是列式存储的另一个显著问题,该问题一般通过定义宽表来解决,但是当面对多表关联时(比如不同维度数据)通常会集中进行数据关联,效率低下,分布式场景下该问题更加明显。当列的数量达到一定规模后,对于数据的查询和写入也会造成一些麻烦(有些系统在查询时会获取所有表结构,写入时也无法实现不同列分别更新)。

发明内容

[0006] 针对现有技术中的缺陷,本发明的目的是提供一种海量标签存储系统及方法。
[0007] 根据本发明提供的一种海量标签存储系统,包括以下模块:
[0008] 接口模块:使用类SQL语法操作系统,用于元数据管理,数据修改及查询;
[0009] 数据写入模块:用于写入列数据,重复时会忽略该列数据;
[0010] 数据更新模块:用于更新列数据,不存在时会忽略该列数据;
[0011] 数据删除模块:用于数据删除;
[0012] 数据查询模块:用于查询和统计数据;
[0013] 底层数据结构模块:用于持久化保存数据。
[0014] 优选的,所述接口模块包括以下子模块:
[0015] 数据定义语法模块:用于定义数据的结构;包括CREATE、DROP、ALTER三个操作;
[0016] 数据写入语法模块:用于写入和更新列数据;包括INSERT、UPDATE两个操作;
[0017] 数据查询语法模块:用于查询和统计数据;包括SELECT操作。
[0018] 优选的,所述数据写入模块具体步骤如下:
[0019] 步骤s301:数据写入内存中以列式的方式排列,同时写入WAL日志文件;
[0020] 步骤s302:定时定量刷新到磁盘,数据写入时会计算分区ID,若分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;
[0021] 步骤s303:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件。
[0022] 优选的,所述数据更新模块具体操作如下:
[0023] 步骤s401:数据更新时先写入内存,同时写入WAL日志文件;
[0024] 步骤s402:定时定量刷新到磁盘,数据写入时会计算分区ID;更新操作会判断如果分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生,数据写入后标记WAL日志;
[0025] 步骤s403:后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件,对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件;
[0026] 步骤s404:采用与数据写入相似的方法进行数据更新。
[0027] 优选的,所述数据删除模块具体实现如下:
[0028] 步骤s501:数据删除和更新的流程一致;
[0029] 步骤s502:当需要删除操作实时生效时,执行操作包括直接删除分区和直接删除列数据。
[0030] 优选的,所述数据查询模块具体步骤如下:
[0031] 步骤s601:数据查询过程;
[0032] 步骤s602:数据关联操作;
[0033] 步骤s603:查询未合并数据。
[0034] 优选的,所述底层数据结构模块具体实现如下:
[0035] 步骤s701:配置select*时返回的字段,支持该场景不返回所有字段;其他字段的查询能够在语句中显示应用;
[0036] 步骤s702:列状态;
[0037] 步骤s703:表结构更新。
[0038] 优选的,所述步骤s601包括:
[0039] 步骤s6011:解析查询语句后构造出执行计划,通过代价优化器以及启发式优化器优化后执行;
[0040] 步骤s6012:部分过滤操作会由启发式优化器下推到数据读取操作中进行;
[0041] 步骤s6013:数据读取对数据进行分片,粒度是行组级别,由分片策略确定,默认会把连续的行组分配到一个分片中;
[0042] 步骤s6014:内存中的数据如果还未刷新到磁盘,则作为单独的一个分片读取,可使用参数设置是否在查询时使用这部分数据;
[0043] 步骤s6015:每个操作都有分片信息,不同分片会并行执行,操作优先使用调用SIMD指令集向量化执行;
[0044] 步骤s6016:不同操作都有分片策略,大多数操作不主动重新分片,对于一些操作,比如排序或关联,会按照该操作的分片策略重新对数据分片。
[0045] 优选的,所述步骤s602包括以下步骤:
[0046] 步骤s6021:先对需要关联的数据列创建索引,该索引记录每个分片内的每个行组的最大值和最小值;
[0047] 步骤s6022:当对两个表进行关联操作时,关联键信息会在执行计划阶段通知到关联的内部操作中;
[0048] 步骤s6023:数据读取操作会根据以上信息,调整分片逻辑,尽量保证连续的关联键在一个分片中;
[0049] 步骤s6024:关联操作的分片策略根据这些信息,调整每个分片操作的输入数据;
[0050] 步骤s6025:在分布式场景下,当关联键和表的分布ID一致时,关联操作不会产生额外的网络开销;否则分片逻辑会按照最优策略处理关联分片。
[0051] 根据本发明提供的一种海量标签存储方法,包括以下步骤:
[0052] 步骤s1:接口操作,使用类SQL语法操作系统,用于元数据管理,数据修改及查询;
[0053] 步骤s2:数据写入操作,用于写入列数据,重复时会忽略该列数据;
[0054] 步骤s3:数据更新操作,用于更新列数据,不存在时会忽略该列数据;
[0055] 步骤s4:数据删除操作,用于数据删除;
[0056] 步骤s5:数据查询操作,用于查询和统计数据;
[0057] 步骤s6:底层数据结构操作,用于持久化保存数据。
[0058] 与现有技术相比,本发明具有如下的有益效果:
[0059] 1.提供一定的数据更新能力,数据更新时使用异步更新的逻辑,对实时写入和数据查询几乎没有影响。能够按列对数据进行写入或更新,对于宽表场景更加友好,可以不需要一次性写入整张表的数据。数据修改后也不需要更新整张表的数据。
[0060] 2.数据关联,对于关联操作场景进行优化,对于不得不进行关联的情况,可以定义索引或使用分区键来提升数据关联性能。
[0061] 3.无限列扩展,能即时扩展大量列或删除大量列,查询时对宽表查询进行优化。

附图说明

[0062] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0063] 图1为本申请实施例一种海量标签存储系统的总体模块图;
[0064] 图2为本申请实施例一种海量标签存储系统中数据写入示意图;
[0065] 图3为本申请实施例一种海量标签存储系统中数据更新示意图;
[0066] 图4为本申请实施例一种海量标签存储系统中数据删除示意图;
[0067] 图5为本申请实施例一种海量标签存储系统中数据查询示意图。

具体实施方式

[0068] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
[0069] 一种海量标签存储系统,参照图1,包括以下模块:
[0070] 接口模块:使用类SQL语法操作系统,用于元数据管理,数据修改及查询;
[0071] 数据写入模块:用于写入列数据,重复时会忽略该列数据;
[0072] 数据更新模块:用于更新列数据,不存在时会忽略该列数据;
[0073] 数据删除模块:用于数据删除;
[0074] 数据查询模块:用于查询和统计数据;
[0075] 底层数据结构模块:用于持久化保存数据。
[0076] 接口模块,使用类SQL语法操作系统,用于元数据的管理,数据修改及查询。
[0077] 具体的,包括以下子模块:
[0078] 数据定义语法模块,用于定义数据的结构;包括CREATE、DROP、ALTER三个操作,数据定义语法如下:
[0079]
[0080] 数据写入语法模块,用于写入和更新列数据;包括INSERT、UPDATE两个操作,数据定义语法如下:
[0081] INSERT INTO[db.]table[(c1,c2,c3)]VALUES(v1,v2,v3),...
[0082] UPDATE INTO[db.]table[(c1,c2,c3)]VALUES(v1,v2,v3),...
[0083] 数据查询语法模块,参考图4,用于查询和统计数据;包括SELECT操作,数据定义语法如下:
[0084] SELECT[DISTINCT]expression
[0085] [FROM[db.]table|(subquery)]
[0086] [INNER|LEFT|RIGHT|FULL|CROSS]
[0087] [OUTER|SEMI|ANTI]JOIN(subquery)|table(ON)|(USING[0088] )
[0089] [WHERE expression]
[0090] [GROUP BY expression]
[0091] [HAVING expression]
[0092] [ORDER BY expression]
[0093] [LIMIT[offset_value,]n]
[0094] [UNION...]
[0095] 数据写入模块,用于写入列数据,重复时会忽略该列数据,参照图2,具体实现如下:
[0096] 1.数据写入内存中以列式的方式排列,同时写入WAL日志文件
[0097] a.重启动作不常发生,但往往需要尽快恢复,所以重新启动时的初始化需要尽量轻量。启动时不会将WAL加载到内存,而是异步将WAL日志按列式格式存储成更新文件,加快启动速度(但这部分数据的生效可能会有延迟)。
[0098] b.写入时进行主键过滤,保证分区ID内主键唯一(分布式场景下为分布ID+分区ID);
[0099] i.使用rocksdb保存主键信息,值为各个列是否有值的bitmap;
[0100] Ii.插入时会过滤所有插入列都有值的数据。
[0101] 2.定时定量刷新到磁盘,数据写入时会计算分区ID(在表结构中定义),写入操作会判断如果分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生。数据写入后标记WAL日志。
[0102] 3.后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件。对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件。
[0103] 数据更新模块,用于更新列数据,不存在时会忽略该列数据,参考图3,具体实现如下:
[0104] 1.在OLAP系统中,我们假设即使数据发生更新,也往往不是多频次的任意字段的少量更新,而是大批量相同字段的数据更新操作。所以我们首先优化批量更新的操作。
[0105] 2.由于不同分区存储在不同文件中,主键和分区键也可以不相同,我们无法保证主键的全局唯一性。但是我们可以保证在某个分区ID内主键的唯一性(分布式场景下为分布ID+分区ID)。
[0106] 3.数据更新时先写入内存,同时写入WAL日志文件
[0107] a.数据更新需要指定主键和分区键(分布式场景下为分布式键+分区键+主键);
[0108] b.系统重新启动时会从WAL日志重新构建内存中的数据。
[0109] 4.定时定量刷新到磁盘,数据写入时会计算分区ID(在表结构中定义),更新操作会判断如果分区ID内数据数目未达到阈值,则将分区合并写入一个文件中,减少小的碎片文件的产生。数据写入后标记WAL日志。
[0110] 5.后台运行异步的分区合并程序,会对ID相同的分区数据进行合并,然后写入新的分区文件,删除旧的分区文件。对于写入时多个分区在一个文件中的情况,则会标记该分区为删除状态,当该文件的所有分区都为删除状态时,删除该文件。
[0111] 6.我们采用和数据写入相似的方式进行数据更新,不同之处是更新文件无法查询,只有当合并后才会生效。(我们假设更新不常发生,并且可接受一定时间的延迟生效,优先保证写入和查询性能)。
[0112] 数据删除模块,用于数据删除,参考图4,具体实现如下:
[0113] 1.在OLAP系统中,数据删除,特别是单条数据的删除不常发生;
[0114] 2.数据删除和更新的流程一致;
[0115] 3.有些场景可能需要删除操作实时生效,以下两个操作可以实时生效:
[0116] a.直接删除分区的操作;
[0117] i.删除分区会删除分区数据文件,主键信息,并标记合并分区文件和更新文件中的分区为丢弃。
[0118] b.直接删除列数据;
[0119] i.标记分区文件,对应的列标记为已删除,重新分配列id;
[0120] 1.标记为已删除的列id,会在之后回收;
[0121] a.当rocksdb中的所有主键对应位都更新后;
[0122] 2.标记为已删除的列的数据不会在合并时写入(当成null或默认值);
[0123] ii.可删除单个分区的列数据;
[0124] iii.可删除所有分区的列数据。
[0125] 数据查询模块,用于查询和统计数据,参考图5,具体实现如下:
[0126] 1.数据查询过程
[0127] a.解析查询语句后构造出执行计划,通过代价优化器以及启发式优化器优化后执行;
[0128] b.一些过滤操作会由启发式优化器下推到数据读取操作中进行;
[0129] c.数据读取会对数据进行分片,粒度是行组级别,由分片策略确定,默认会把连续的行组分配到一个分片中;
[0130] d.内存中的数据如果还未刷新到磁盘,则作为单独的一个分片读取,可使用参数设置是否在查询时使用这部分数据;
[0131] e.每个操作都有分片信息,不同分片会并行执行,操作优先使用调用SIMD指令集向量化执行;
[0132] f.不同操作都有分片策略,大多数操作不主动重新分片,对于一些操作,比如排序或关联,会按照该操作的分片策略重新对数据分片。
[0133] 2.数据关联操作
[0134] a.事先对需要关联的数据列创建索引,该索引会记录每个分片内的每个行组的最大最小值;
[0135] b.当对两个表进行关联操作时,关联键信息会在执行计划阶段通知到关联的内部操作中;
[0136] c.数据读取操作会根据以上信息,调整分片逻辑,尽量保证连续的关联键在一个分片中;
[0137] d.关联操作的分片策略会根据这些信息,调整每个分片操作的输入数据;
[0138] e.在分布式场景下,当关联键和表的分布ID一致时,关联操作不会产生额外的网络开销。否则分片逻辑会按照最优策略处理关联分片。
[0139] 3.如何查询未合并数据
[0140] a.相同分区ID内的不同数据文件可能有不同的列,行组顺序也可能不同;
[0141] b.采用数据关联相似的方式处理,使用分片策略尽量保证相同主键范围的数据在一个分片中处理,行组可能在不同分片重复读取;
[0142] c.可以使用查询参数控制是否查询未合并和内存数据,控制查询的实时性或查询性能。
[0143] 底层数据结构模块,用于持久化保存数据,具体实现如下:
[0144] 1.当列的规模达到一定程度后,获取schema的开销也将变得昂贵。
[0145] a.本系统可配置select*时返回的字段,可支持该场景不返回所有字段;
[0146] b.其他字段的查询可在语句中显示应用。
[0147] 2.列状态
[0148] a.每个分区文件中的列信息包括
[0149] i.状态:启用,已删除;
[0150] ii.id:对应rocksdb中的位置;
[0151] iii.类型;
[0152] iv.名称;
[0153] b.不同分区内的相同列的id可能不一致
[0154] i.由于单独删除分区数据导致。
[0155] 3.表结构更新
[0156] a.扩展列
[0157] i.扩展列时会分配新的列id;
[0158] ii.未插入值时查询时返回默认值;
[0159] iii.可以使用数据插入接口写入数据;
[0160] b.删除列
[0161] i.标记分区文件,对应的列标记为已删除;
[0162] ii.删除所有分区的列数据。
[0163] 本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0164] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。