一种数据存储方法和装置
技术领域
本发明涉及技术领域,尤其涉及一种数据存储方法和装置。
背景技术
在大数据时代下,数据模式的多样性、数据使用的复杂性和数据的体量给了数据库管理系统更大的挑战。用户再也无法使用单一的数据库管理系统管理不同的数据,而是根据数据的不同特征针对性的选取对应的数据库。研究者将关系型大数据按照使用特征划分为联机事务处理(OLTP)、联机分析处理(OLAP)和流式计算(Streaming),并各自研发出相应的数据库管理系统来管理其数据。这些数据库管理系统在研发时进行了深度的定制,各个组件的设计有着很大差别。
由于数据库系统数量的增多和复杂性的提高,用户使用数据库所需要的学习成本也在增加。为了降低用户使用数据库的学习成本和维护成本,研究者又提出自治数据库的概念。自治数据库是在数据库的基础上利用人工智能技术,帮助用户进行如索引设计、参数调整、查询计划设计的工作。自治数据库可以为用户推荐一套数据库配置,来提升在用户给定数据集上执行操作的性能。
在现有技术下,面向不同任务(例如OLTP、OLAP、Streaming)的数据库系统在数据上是互相孤立的,对单个任务执行的操作无法立刻反映到另一个数据库系统。这启发了混合事务分析处理(HTAP)系统的研究,旨在研究在单一系统下对数据同时运行OLTP、OLAP任务的可能性。当前的HTAP系统采用的设计模式是将OLAP系统和OLTP系统进行融合,而这样的融合技术简单而生硬,在性能上无法兼顾OLTP与OLAP任务。
发明内容
本发明要解决的技术问题在于数据库性能不足的问题,针对现有技术中的缺陷,提供一种。
为了解决上述技术问题,本发明提供了一种数据存储方法,包括:
对目标数据库进行性能测试,生成每类存储结构的性能表现模型;
预测所述目标数据库的查询负载,并根据所述查询负载和待存储数据的数据特征选取待选存储结构;
根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值,并基于各个所述性能预测值得到各个所述待选存储结构的总代价;
选择所述总代价最小的待选存储结构作为最优存储结构,并将当前的存储结构替换为所述最优存储结构。
优选地,所述对目标数据库进行性能测试,生成每类存储结构的性能表现模型,包括:
预先选取至少一个性能特征,并生成对应的特征数据;
将所述特征数据输入目标数据库,在所述目标数据库中进行测试查询,以计算所述目标数据库的性能值;
根据所述性能特征及对应的性能值生成每类存储结构的性能表现模型。
优选地,所述对目标数据库进行性能测试,生成每类存储结构的性能表现模型,还包括:
在所述性能表现模型不符合评估要求时,再次生成所述性能特征对应的特征数据,以重新生成所述目标数据库的性能表现模型。
优选地,所述预测所述目标数据库的查询负载,并根据所述查询负载和待存储数据的数据特征选取待选存储结构,包括:
获取所述目标数据库中各个数据分区的查询日志,基于所述查询日志预测每个所述数据分区的查询负载;
根据所述查询负载和待存储数据的数据特征,利用启发式规则选取待选存储结构;
其中,所述启发式规则包括:
所述待存储数据中具有预定属性的第一集合,在所述查询负载中的出现频率大于第一预设频率时,选择将所述第一集合中的数据邻近保存作为待选存储结构;
待存储数据中具有预定属性的第二集合和第三集合,在所述查询负载中的出现频率均大于第二预设频率时,选择将所述第二集合和所述第三集合的交集中的数据邻近保存作为待选存储结构、或选择将所述第二集合和所述第三集合的并集中的数据邻近保存作为待选存储结构;
待存储数据中具有的预定属性,在所述负载中的聚集查询频率大于第三预设频率时,选择将具有预定属性的数据进行列式存储作为待选存储结构;
待存储数据中具有预定属性的第四集合,对所述第四集合中的数据进行增加、改动或删除的操作频率大于第四预设频率时,选择将所述第四集合中的数据进行行式存储作为待选存储结构。
优选地,所述根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值,并基于各个所述性能预测值得到各个所述待选存储结构的总代价,包括:
根据所述数据分区的查询负载和查询计划器确定所述待选存储结构的查询计划;
基于所述查询计划得到所述待选存储结构的总代价表达式;
根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值;
按所述总代价表达式对各个所述性能预测值进行计算,以得到各个所述待选存储结构的总代价。
本发明还提供了一种数据存储装置,包括:
测试模块,用于对目标数据库进行性能测试,生成每类存储结构的性能表现模型;
选取模块,用于预测所述目标数据库的查询负载,并根据所述查询负载和待存储数据的数据特征选取待选存储结构;
计算模块,用于根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值,并基于各个所述性能预测值得到各个所述待选存储结构的总代价;
替换模块,用于选择所述总代价最小的待选存储结构作为最优存储结构,并将当前的存储结构替换为所述最优存储结构。
优选地,所述测试模块还用于:
预先选取至少一个性能特征,并生成对应的特征数据;
将所述特征数据输入目标数据库,在所述目标数据库中进行测试查询,以计算所述目标数据库的性能值;
根据所述性能特征及对应的性能值生成每类存储结构的性能表现模型。
优选地,所述测试模块进一步用于:
在所述性能表现模型不符合评估要求时,再次生成所述性能特征对应的特征数据,以重新生成所述目标数据库的性能表现模型。
优选地,所述选取模块还用于:
获取所述目标数据库中各个数据分区的查询日志,基于所述查询日志预测每个所述数据分区的查询负载;
根据所述查询负载和待存储数据的数据特征,利用启发式规则选取待选存储结构;
其中,所述启发式规则包括:
所述待存储数据中具有预定属性的第一集合,在所述查询负载中的出现频率大于第一预设频率时,选择将所述第一集合中的数据邻近保存作为待选存储结构;
待存储数据中具有预定属性的第二集合和第三集合,在所述查询负载中的出现频率均大于第二预设频率时,选择将所述第二集合和所述第三集合的交集中的数据邻近保存作为待选存储结构、或选择将所述第二集合和所述第三集合的并集中的数据邻近保存作为待选存储结构;
待存储数据中具有的预定属性,在所述负载中的聚集查询频率大于第三预设频率时,选择将具有预定属性的数据进行列式存储作为待选存储结构;
待存储数据中具有预定属性的第四集合,对所述第四集合中的数据进行增加、改动或删除的操作频率大于第四预设频率时,选择将所述第四集合中的数据进行行式存储作为待选存储结构。
优选地,所述计算模块还用于:
根据所述数据分区的查询负载和查询计划器确定所述待选存储结构的查询计划;
基于所述查询计划得到所述待选存储结构的总代价表达式;
根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值;
按所述总代价表达式对各个所述性能预测值进行计算,以得到各个所述待选存储结构的总代价。
实施本发明的,具有以下有益效果:
1、能够从存储结构的角度上优化数据库的性能;
2、使用数据分区的思想,适应大数据的处理需求,且降低了计算机设计存储结构所需要的计算时间,也简化了其他组件设计和实现;
3、使用运行时的代价作为存储结构设计的考虑因素,更加准确;
4、对用户的查询进行预测,可以提前发现未来可能出现的性能不足时机,减少数据库从性能不足到性能提升中所需要的延迟。
附图说明
图1是本发明实施例提供的一种数据存储方法的示意图;
图2是根据本发明一个可参考实施例的数据存储方法的总体结构的示意图;
图3是获取存储结构在不同特征上性能度量模型的流程图;
图4是针对当前查询任务获取最优存储结构的流程图;
图5是本发明实施例提供的一种数据存储装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
为了解决现有HTAP技术方案生硬、性能差强人意的技术问题,本发明实施例提出一种数据存储方法,能够自动选择存储结构从而提升数据库性能。该数据存储方法方法利用人工智能技术,通过动态选择存储结构的方法,以达到在HTAP任务上数据库性能的提升,并且在此基础上设计出不用人为干预的自治数据库系统。相比于现有的自治数据库系统,该数据存储方法提出了一个新的设计方向——存储结构设计,这一设计方向可以进一步加强自治数据库的设计空间,也可以进一步提升现有自治数据库的性能。
如图1所示,本发明实施例提供的一种数据存储方法,包括以下步骤:
S1、对目标数据库进行性能测试,生成每类存储结构的性能表现模型。
获取当前环境下每类存储结构对于不同性能特征的性能表现模型,通过性能表现模型可以针对未记录性能特征的性能表现的一个较准确、快速的预测。性能表现模型可以仅在第一次目标运行数据库时生成。
在实施时,将需要性能优化的数据库作为目标数据库。作为一种优选的实施方式,目标数据库可以是HTAP数据库,且目标数据库具有定制存储结构的功能,使用时用户可以访问该目标数据库的查询计划接口。此外,目标数据库需要支持单数据表的分区存储,即支持对数据表的水平化划分和在其上的并行查询。
在本发明实施例中,S1可以通过以下步骤实现:预先选取至少一个性能特征,并生成对应的特征数据;将特征数据输入目标数据库,在目标数据库中进行测试查询,以计算目标数据库的性能值;根据性能特征及对应的性能值生成每类存储结构的性能表现模型。
通过预先生成特征数据,用于目标数据库的测试查询,从而直接得到目标数据库的真实性能表现,以便于为不同的存储结构提供统一的比较标准和准确的比较结果。
在本发明实施例中,S1还可以进一步包括以下步骤:在性能表现模型不符合评估要求时,再次生成性能特征对应的特征数据,以重新生成目标数据库的性能表现模型。
其中的评估要求可以是方差或偏差等模型评估标准,且评估要求可以参考现有方式实现,性能表现模型的评估还可以采用现有的技术方案或工具实现,本发明实施例均不予赘述。
S2、预测目标数据库的查询负载,并根据查询负载和待存储数据的数据特征选取待选存储结构。
本步骤用于确定参与性能比较的候选存储结构。若使用历史负载进行最优结构的生成,则后续在调整结构时会有滞后性。而通过在预测的查询负载进行分析选取的待选存储结构可以得到最优存储结构,从而及时得到最佳存储结构,进一步提高系统性能。
此外,本步骤可以定时执行,且针对每个数据表(即目标数据库)中的每个分区运行一次。通过对目标数据库进行分区,减小了采样所需要的数据量、提升了设计任务的并行性,还可以适应在数据上非均匀分布的查询负载,此种情况下每个分区可能有不同的最优存储结构。
在本发明实施例中,S2可以通过以下方式实现:获取目标数据库中各个数据分区的查询日志,基于查询日志预测每个数据分区的查询负载;根据查询负载和待存储数据的数据特征,利用启发式规则选取待选存储结构。
查询日志可以通过目标数据库接口得到,可以根据查询日志中查询和发生频率的关系,在负载预测模块中使用机器学习模型预测接下来一段时间内的查询负载,具体实现可以参考现有方式,本发明实施例均不予赘述。
常用的存储结构主要包括数据邻近保存、列式存储和行式存储等。其中的启发式规则可以是基于数据库的关系模式确定存储结构,具体包括但不限于:
待存储数据中具有预定属性的第一集合,在查询负载中的出现频率大于第一预设频率时,选择将第一集合中的数据邻近保存作为待选存储结构;
待存储数据中具有预定属性的第二集合和第三集合,在查询负载中的出现频率均大于第二预设频率时,选择将第二集合和第三集合的交集中的数据邻近保存作为待选存储结构、或选择将第二集合和第三集合的并集中的数据邻近保存作为待选存储结构;
待存储数据中具有的预定属性,在查询负载中的聚集查询频率大于第三预设频率时,选择将具有预定属性的数据进行列式存储作为待选存储结构;
待存储数据中具有预定属性的第四集合,对第四集合中的数据进行增加、改动或删除的操作频率大于第四预设频率时,选择将第四集合中的数据进行行式存储作为待选存储结构。
上述启发式规则中的第一预设频率、第二预设频率、第三预设频率和第四预设频率可以根据实际需要或历史记录等分别确定,且第一预设频率、第二预设频率、第三预设频率和第四预设频率可以相同或部分相同。
S3、根据性能表现模型计算各个待选存储结构中每个数据特征的性能预测值,并基于各个性能预测值得到各个待选存储结构的总代价。
根据S1中得到的性能表现模型,可以计算出每个数据特征的单项性能预测值,从而得到每个待选存储结构的总代价。
在本发明实施例中,S3可以通过以下方式实现:根据数据分区的查询负载和查询计划器确定待选存储结构的查询计划;基于查询计划得到待选存储结构的总代价表达式;根据性能表现模型计算各个待选存储结构中每个数据特征的性能预测值;按总代价表达式对各个性能预测值进行计算,以得到各个待选存储结构的总代价。
根据查询负载,调用目标数据库中的查询计划器,可以得到每个待选存储结构的对应的查询计划,该查询计划包含了调用对存储引擎的调用参数的估计,例如调用哪个操作、多少次、调用范围等,结合查询计划和性能表现模型可以得到总代价的计算表达式,从而在比较不同存储结构时能够得到更加真实的性能表现。
S4、选择总代价最小的待选存储结构作为最优存储结构,并将当前的存储结构替换为最优存储结构。
在选取最优存储结构后,可以将当前分区的存储结构替换为最优存储结构,或将目标数据库的整体存储结构替换为最优存储结构。本步骤可以在后台进行新数据结构的建立和替换,从而保证数据的一致性,且不需要人工参与。
实施例二
如图2所示,本实施例二与实施例一基本相同,相同之处不再赘述,不同之处在于:
在应用本发明实施例的一种数据存储方法时,可以分为两个部分,第一个部分为获取当前环境下存储结构在不同数据特征上的性能表现模型,该部分内容仅在第一次运行数据库时运行一次;第二个部分为最优存储结构的自动生成,该部分内容定时运行,并且针对每个数据表的每个分区运行一次。分区减小了采样所需要的数据量、提升了设计任务的并行性,此外还可以适应在数据上非均匀分布的查询负载,因为这种情况下每个分区可能有不同的最优存储结构。
在实施该数据存储方法时,将需要性能优化的数据库作为目标数据库。目标数据库中的典型为HTAP数据库。目标数据库需要有定制存储结构的功能,并且用户可以访问该数据库的查询计划接口。此外,该数据库需要支持单数据表的分区存储,即支持对数据表的水平化划分和在其上的并行查询。
其中,
如图3所示,获取当前环境下存储结构在不同数据特征上的性能表现模型,具体可以参考如下步骤:
步骤一:由性能采样模块决定需要进行采样的数据特征F
i(即性能特征),并生成数据
其中,生成的数据大小符合分区的一般大小。
步骤二:将
输入到目标数据库中,并执行一系列查询。在数据输入和执行查询中度量在目标数据库上的性能度量(即性能值)
从而直接得到数据库的真实性能表现,以便于为不同的存储结构提供统一的比较标准和准确的比较结果。
步骤三:将数据特征和对应的性能表现进行记录,记录的结果作为训练集(即将
和
加入到步骤一采集的数据合集TS)。在代价学习模块中,使用机器学习方法,在训练集上学习不同存储结构的性能模型,从而可以得到针对未记录数据特征的性能表现的一个较准确、快速的预测,此外,训练时以
度量学习模型M,表示为
步骤四:判断该模型的误差,如果误差不满足收敛要求,返回步骤一,由性能采样模块进行更多的采样。用户可以设置一个超时参数,当超时后不再采集新的性能数据,直接用当前数据获取性能模型,从而提高模型的准确度并避免过长时间的等待。
步骤五:记录下当前模型(即性能表现模型),用于获取最优存储结构部分。
如图4所示,针对当前查询任务获取最优存储结构,具体可以参考如下步骤:
步骤一:获取目标数据表的查询日志L、表示数据特征的元数据F和学习模型M。这些数据可以通过目标数据库接口和数据采样得到。
步骤二:根据查询日志L中查询和发生频率的关系,在负载预测模块中使用机器学习模型预测接下来一段时间内查询语句Q。如果用历史的负载进行最优结构的生成,则系统在调整结构时会有滞后性。通过在预测的负载上进行分析得到最优存储结构,可以及时得到最佳存储结构,进一步提高系统性能。
步骤三:在候选结构生成模块中,根据元数据的特征F和查询语句Q(即查询负载),使用启发式规则生成候选存储结构S=S1∪S2∪…∪Sn(S1……Sn即各个待选存储结构)。这一步确定了参与性能比较的候选存储结构,只有满足启发式规则的存储结构参加代价估计,从而缩小了存储结构的设计空间,减小计算量。启发式规则包括但不限于:
对于关系模式R中属性的集合X(即待存储数据中具有预定属性的第一集合),如果X在查询Q中频繁出现,那么将X中的数据邻近保存可以提高查询性能;
对于关系模式R中属性的集合Z和Y(即待存储数据中具有预定属性的第二集合和第三集合),如果Z和Y均在查询Q中频繁出现,那么Z∪Y和Z∩Y的数据邻近保存均有可能提高性能;
对于关系模式R中属性A(即待存储数据中具有的预定属性),如果对于A的聚集查询在Q中频繁出现,那么对A进行列式存储有可能提高性能;
对于关系模式R中属性集合W(即待存储数据中具有预定属性的第四集合),如果对于W的增加、改动、删除操作频繁出现,那么对W进行行式存储有可能提高性能。
步骤四:根据候选结构S和查询语句Q,调用目标数据库中的查询计划器,得到每个候选结构的对应的查询计划。查询计划中包含了调用对存储引擎的调用参数的估计,包括调用哪个操作、多少次、调用范围等。结合之前得到的存储引擎的性能模型可以得到总代价的计算表达式,从而在比较不同存储结构时得到更加真实的性能表现。
步骤五:在存储结构代价估计模块中,根据第一部分得到的M,计算在F下的单项性能预测值,并代入存储结构的代价函数Cost(Si,F)=AiPF(即总代价表达式),得到每个候选结构的总代价,其中,Ai是使用查询计划器得到的存储结构Si在Q下的系数组合。
步骤六:在查询语句Q下,从各个候选结构S
i中,选择代价最小的候选结构作为当前负载下对应的最优结构,具体地,利用学习模型M得到的
代入P
F得到每个Cost(S
i,F),令
步骤七:由存储结构应用模块,将当前分区的存储结构替换为最优存储结构。存储结构应用模块在后台进行新数据结构的建立和替换,保证了数据的一致性,并且不用人工参与。
实施例三
如图5所示,本发明实施例的一种数据存储装置5包括:测试模块51、选取模块52、计算模块53和替换模块54。
其中,
测试模块51,用于对目标数据库进行性能测试,生成每类存储结构的性能表现模型;
选取模块52,用于预测所述目标数据库的查询负载,并根据所述查询负载和待存储数据的数据特征选取待选存储结构;
计算模块53,用于根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值,并基于各个所述性能预测值得到各个所述待选存储结构的总代价;
替换模块54,用于选择所述总代价最小的待选存储结构作为最优存储结构,并将当前的存储结构替换为所述最优存储结构。
在本发明实施例中,所述测试模块51还可以用于:
预先选取至少一个性能特征,并生成对应的特征数据;
将所述特征数据输入目标数据库,在所述目标数据库中进行测试查询,以计算所述目标数据库的性能值;
根据所述性能特征及对应的性能值生成每类存储结构的性能表现模型。
在本发明实施例中,所述测试模块51可以进一步用于:
在所述性能表现模型不符合评估要求时,再次生成所述性能特征对应的特征数据,以重新生成所述目标数据库的性能表现模型。
在本发明实施例中,所述选取模块52还可以用于:
获取所述目标数据库中各个数据分区的查询日志,基于所述查询日志预测每个所述数据分区的查询负载;
根据所述查询负载和待存储数据的数据特征,利用启发式规则选取待选存储结构。
此外,所述启发式规则可以包括:
所述待存储数据中具有预定属性的第一集合,在所述查询负载中的出现频率大于第一预设频率时,选择将所述第一集合中的数据邻近保存作为待选存储结构;
待存储数据中具有预定属性的第二集合和第三集合,在所述查询负载中的出现频率均大于第二预设频率时,选择将所述第二集合和所述第三集合的交集中的数据邻近保存作为待选存储结构、或选择将所述第二集合和所述第三集合的并集中的数据邻近保存作为待选存储结构;
待存储数据中具有的预定属性,在所述负载中的聚集查询频率大于第三预设频率时,选择将具有预定属性的数据进行列式存储作为待选存储结构;
待存储数据中具有预定属性的第四集合,对所述第四集合中的数据进行增加、改动或删除的操作频率大于第四预设频率时,选择将所述第四集合中的数据进行行式存储作为待选存储结构。
在本发明实施例中,所述计算模块53还可以用于:
根据所述数据分区的查询负载和查询计划器确定所述待选存储结构的查询计划;
基于所述查询计划得到所述待选存储结构的总代价表达式;
根据所述性能表现模型计算各个所述待选存储结构中每个数据特征的性能预测值;
按所述总代价表达式对各个所述性能预测值进行计算,以得到各个所述待选存储结构的总代价。
综上所述,本发明实施例的一种数据存储方法和装置,至少具有以下有益效果:
1、能够从存储结构的角度上优化数据库的性能;
2、使用数据分区的思想,适应大数据的处理需求,且降低了计算机设计存储结构所需要的计算时间,也简化了其他组件设计和实现;同时,存储分区能够提升查询的并行性、降低存储结构替换的开销、提升存储结构读写代价预测的准确性
3、获取数据库在当前硬件环境下的实际性能表现,更能反映数据库的运行时性能,使用运行时的代价作为存储结构设计的考虑因素,更加准确;
4、对用户的查询进行预测,能够获取到用户查询任务的变化信息,从而提前选择最佳存储结构,且可以提前发现未来可能出现的性能不足时机,减少数据库从性能不足到性能提升中所需要的延迟;
5、基于机器学习的读写操作代价建模方法,能够更加全面、准确的估计存储引擎的读写代价,可以为未探测到的特征组合提供性能估计;并且,基于代价的存储结构选择,能够更加准确的得出适应于当前负载的最佳存储结构,同时缩小了存储结构的设计空间,减小了计算量;
6、动态替换存储结构;无需人为干预,自动替换性能不足的存储分区,提升对应查询的性能。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。