一种金融数据列式存储方法、系统、设备及存储介质转让专利

申请号 : CN202210423525.0

文献号 : CN114880322B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 卢树文曾赞达罗文杰柯年军周伟杰谭彪荣

申请人 : 广州经传多赢投资咨询有限公司

摘要 :

本申请涉及数据存储的技术领域,公开了一种金融数据列式存储方法、系统、设备及存储介质,包括:将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,所述列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;从若干所述列结构中复制元数据并存放在内存中,以形成元数据副本;将若干所述列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列;本申请具有提高金融数据的访存效率的效果。

权利要求 :

1.一种金融数据列式存储方法,其特征在于:所述金融数据列式存储方法的步骤包括:将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,所述列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;

从若干所述列结构中复制元数据并存放在内存中,以形成元数据副本;

将若干所述列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;

为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列;

其中,为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列的步骤之后,还包括:获取数据更新指令,判断数据更新类型,所述数据更新类型包括变更和追加;

若所述数据更新类型为追加,则进一步判断源数据的预留空间是否充足;

若源数据的预留空间充足,则获取列结构的写锁,将待更新数据进行分解后添加至对应的列结构的源数据中;

其中,若所述数据更新类型为追加,则进一步判断元数据的预留空间是否充足的步骤之后,还包括:若源数据的预留空间不充足,则复制一份元数据和源数据到新的存储块中;

基于待更新数据对源数据进行变更,并修改元数据的版本信息;

基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。

2.根据权利要求1所述的一种金融数据列式存储方法,其特征在于:将若干所述列结构的元数据复制并存放在内存中的步骤之后,还包括:基于若干列结构的元数据建立一个基于B+树的数据结构。

3.根据权利要求1所述的一种金融数据列式存储方法,其特征在于:获取数据更新指令,判断数据更新类型,所述数据更新类型包括变更和追加的步骤之后,还包括:若所述数据更新类型为变更,则复制一份元数据和源数据到新的存储块中;

基于待更新数据对源数据进行变更,并修改元数据的版本信息;

基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。

4.根据权利要求1所述的一种金融数据列式存储方法,其特征在于:基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高的步骤之后,还包括:定期获取元数据的版本信息,并结合元数据的用户引用计数信息进行判断,以对旧版本的元数据以及对应的源数据进行清理,以减少数据库中的数据量。

5.一种列式存储金融数据读取方法,其特征在于:所述列式存储金融数据读取方法用于读取上述权利要求1至4任一项金融数据列式存储方法所存储的金融数据,包括:获取金融数据读取信号,从内存中查询所述金融数据读取信号对应的元数据;

获取读锁,基于所述元数据对硬盘进行一次寻道,以定位对应的列结构;

将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。

6.一种金融数据列式存储系统,其特征在于,包括:

列结构生成模块,用于将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,所述列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;

元数据存储模块,用于从若干所述列结构中复制元数据并存放在内存中,以形成元数据副本;

列结构存储模块,用于将若干所述列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;

对齐列设置模块,用于为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列;

且在为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列之后,获取数据更新指令,判断数据更新类型,所述数据更新类型包括变更和追加;

若所述数据更新类型为追加,则进一步判断源数据的预留空间是否充足;

若源数据的预留空间充足,则获取列结构的写锁,将待更新数据进行分解后添加至对应的列结构的源数据中;

且在若所述数据更新类型为追加,则进一步判断元数据的预留空间是否充足之后,若源数据的预留空间不充足,则复制一份元数据和源数据到新的存储块中;

基于待更新数据对源数据进行变更,并修改元数据的版本信息;

基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。

7.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至

4任一项所述金融数据列式存储方法的步骤。

8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述金融数据列式存储方法的步骤。

说明书 :

一种金融数据列式存储方法、系统、设备及存储介质

技术领域

[0001] 本申请涉及数据存储的技术领域,尤其是涉及一种金融数据列式存储方法、系统、计算机设备及存储介质。

背景技术

[0002] 数据引擎是一项非常重要的基建,在日常业务中,数以TB计算的数据已经无法存储在内存中,因此一个符合自身业务的数据引擎决定了项目的成败。目前业内比较出名的
数据引擎有mysql,tidb,postgresql,oracle,kdb,clickhouse等,由于开源的数据引擎追求更广泛的通用性,因此在金融数据的存储上,并没有达到预期的性能目标。行式数据库由于内部数据的存储特征,在大规模的数据处理;中统计缓慢以列式引擎为主的clickhouse
部署方案采用的是单独进程部署,由于其部署方式决定了交互需经过网络传输,不适用于
高频请求场景。
[0003] 而金融领域的数据,特别是股票类数据的存储中,每一支股票通常都包括收盘价、开盘价和总股本等数据,数据类型的一致性高,且其中需要经常更新和读取的数据类型少,但需要存放的股票数量确十分庞大。
[0004] 因此,针对上述相关技术,发明人认为采用现有开源的数据存储引擎难以满足金融数据存储和读取的需求的问题。

发明内容

[0005] 为了提高金融数据的访存效率,本申请提供一种金融数据列式存储方法、系统、计算机设备及存储介质。
[0006] 本申请的发明目的一采用如下技术方案实现:
[0007] 一种金融数据列式存储方法,包括:
[0008] 将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,所述列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;
[0009] 从若干所述列结构中复制元数据并存放在内存中,以形成元数据副本;
[0010] 将若干所述列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;
[0011] 为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列。
[0012] 通过采用上述技术方案,将待存储的金融数据输入至列式存储引擎中,使金融数据分解后形成若干源数据,其中每一份源数据对应一支股票中一个类型的数据,为每一份
源数据生成用于标识所述源数据存放位置和类型的元数据,并基于若干源数据和对应的元
数据形成若干列结构;从若干列结构中复制一份元数据并存放在内存中,形成元数据副本,便于提高后续进行数据检索的效率,将若干列结构列式存储于硬盘中,且同一种源数据类
型的列结构相邻存放,便于后续数据读取时增加数据读取效率,减少数据库的读写次数;为数据库中的若干列结构设置索引列,并将索引列作为对齐列,以便在进行区间查找的时候,能够更快的进行寻道获取到本次所需数据的索引列,加快数据的查找效率。
[0013] 本申请在一较佳示例中:将若干所述列结构的元数据复制并存放在内存中的步骤之后,还包括:
[0014] 基于所述元数据副本建立一个基于B+树的数据结构。
[0015] 通过采用上述技术方案,元数据副本加载完毕后,基于元数据副本建立一个基于B+树的数据结构,具有存储深度小,查找效率高的特点,同时能够减少查询时硬盘或内存的I/O次数,以实现利用元数据高效查找源数据的。
[0016] 本申请在一较佳示例中:为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列的步骤之后,还包括:
[0017] 获取数据更新指令,判断数据更新类型,所述数据更新类型包括变更和追加;
[0018] 若所述数据更新类型为追加,则进一步判断源数据的预留空间是否充足;
[0019] 若源数据的预留空间充足,则获取列结构的写锁,将待更新数据进行分解后添加至对应的列结构的源数据中。
[0020] 通过采用上述技术方案,当获取到数据更新指令时,判断数据更新类型,以便采取相应的更新方案,数据更新类型包括变更和追加,若数据更新的类型为追加,则进一步判断源数据的预留空间是否足以存放需要追加的待更新数据,若源数据的预留空间足以存放需要追加的待更新数据,则获取相应列结构的写锁,将待更新数据进行分解后添加至对应的
列结构的源数据中,以更新相应的列结构中存储的源数据。
[0021] 本申请在一较佳示例中:若所述数据更新类型为追加,则进一步判断元数据的预留空间是否充足的步骤之后,还包括:
[0022] 若源数据的预留空间不充足,则复制一份元数据和源数据到新的存储块中;
[0023] 基于待更新数据对源数据进行变更,并修改元数据的版本信息;
[0024] 基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,当下一次基于元数据查找时将获取到最新写入的源数据。
[0025] 通过采用上述技术方案,若数据更新的类型为追加,且若元数据的预留空间不足以存放需要追加的待更新数据时,则复制一份元数据和源数据到新的存储块中,基于待更
新数据对新的存储块中的源数据进行追加,并修改相应的源数据中的版本信息,基于修改
后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据
的权重更高,以在后续接收到读操作信号时将更新后的列结构中的源数据复制至内存中,
从而阻断旧版本的源数据的获取行为。
[0026] 本申请在一较佳示例中:获取数据更新指令,判断数据更新类型,所述数据更新类型包括变更和追加的步骤之后,还包括:
[0027] 若所述数据更新类型为变更,则复制一份元数据和源数据到新的存储块中;
[0028] 基于待更新数据对源数据进行变更,并修改元数据的版本信息;
[0029] 基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。
[0030] 通过采用上述技术方案,若数据更新类型为变更,则复制一份元数据和源数据到新的存储块中,基于待更新数据对新的存储块中的源数据进行变更,并修改相应的源数据
中的版本信息,基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中
的权重比修改前的元数据的权重更高,以在后续接收到读操作信号时将更新后的列结构中
的源数据复制至内存中,从而阻断旧版本的源数据的获取行为。
[0031] 本申请在一较佳示例中:基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高的步骤之后,还包括:
[0032] 定期获取元数据的版本信息,并结合元数据的用户引用计数信息进行判断,以对旧版本的元数据以及对应的源数据进行清理,以减少数据库中的数据量。
[0033] 通过采用上述技术方案,定期获取所有元数据的版本信息,结合各元数据的用户引用计数信息进行判断,以定期对旧版本元数据和对应的源数据进行清理,减少硬盘空间
的占用;同时通过引用计数信息判断是否删除旧版本的数据,以达到数据写入时不影响读
取的效果。
[0034] 一种列式存储金融数据读取方法,所述列式存储金融数据读取方法用于读取上述任一金融数据列式存储方法所存储的金融数据,包括:
[0035] 获取金融数据读取信号,从内存中查询所述金融数据读取信号对应的元数据;
[0036] 获取读锁,基于所述元数据对硬盘进行一次寻道,以定位对应的列结构;
[0037] 将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0038] 通过采用上述技术方案,当接收到来自用户端的金融数据读取信号时,从内存中查询读操作信号对应的元数据,获取读锁,通过元数据上记录的源数据的存放位置信息对
硬盘进行一次寻道,以在硬盘中定位到对应的列结构的存储位置;并将定位到的列结构中
的源数据复制至内存缓存中,使用户能够读取到其发出的金融数据读取信号对应的目标源
数据。
[0039] 本申请的发明目的二采用如下技术方案实现:
[0040] 一种金融数据列式存储系统,包括:
[0041] 列结构生成模块,用于将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,所述列结构包括由金融数据分解而成的源数据以及用于标识源数据存放
位置和类型的元数据;
[0042] 元数据存储模块,用于从若干所述列结构中复制元数据并存放在内存中,以形成元数据副本;
[0043] 列结构存储模块,用于将若干所述列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;
[0044] 对齐列设置模块,用于为数据库中的若干所述列结构设置索引列,并将所述索引列作为对齐列。
[0045] 通过采用上述技术方案,将待存储的金融数据输入至列式存储引擎中,使金融数据分解后形成若干源数据,其中每一份源数据对应一支股票中一个类型的数据,为每一份
源数据生成用于标识所述源数据存放位置和类型的元数据,并基于若干源数据和对应的元
数据形成若干列结构;将若干列结构的元数据复制一份并存放在内存中,便于后续进行数
据的检索,将若干列结构列式存储于硬盘中,且同一种源数据类型的列结构相邻存放,便于后续数据读取时增加数据读取效率,减少数据库的读写次数;为数据库中的若干列结构设
置索引列,并将索引列作为对齐列,以便在进行区间查找的时候,能够更快的进行寻道获取到本次所需数据的索引列,加快数据的查找效率。
[0046] 一种列式存储金融数据读取系统,包括:
[0047] 元数据寻找模块,用于获取金融数据读取信号,从内存中查询所述金融数据读取信号对应的元数据;
[0048] 列结构寻找模块,用于获取读锁,基于所述元数据对硬盘进行一次寻道,以定位对应的列结构;
[0049] 源数据复制模块,用于将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0050] 通过采用上述技术方案,当接收到来自用户端的金融数据读取信号时,从内存中查询读操作信号对应的元数据,通过元数据上记录的源数据的存放位置信息对硬盘进行一
次寻道,以在硬盘中定位到对应的列结构的存储位置;获取读锁,并将定位到的列结构中的源数据复制至内存中,使用户能够读取到其发出的金融数据读取信号对应的目标源数据。
[0051] 本申请的发明目的三采用如下技术方案实现:
[0052] 一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述金融数据列式存储方
法和列式存储金融数据读取方法的步骤。
[0053] 本申请的发明目的四采用如下技术方案实现:
[0054] 一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述金融数据列式存储方法和列式存储金融数据读取方法
的步骤。
[0055] 综上所述,本申请包括以下至少一种有益技术效果:
[0056] 1. 将待存储的金融数据输入至列式存储引擎中,使金融数据分解后形成若干源数据,其中每一份源数据对应一支股票中一个类型的数据,为每一份源数据生成用于标识
源数据存放位置和类型的元数据,并基于若干源数据和对应的元数据形成若干列结构;从
若干列结构中复制一份元数据并存放在内存中,形成元数据副本,便于提高后续进行数据
检索的效率,将若干列结构列式存储于硬盘中,且同一种源数据类型的列结构相邻存放,便于后续数据读取时增加数据读取效率,减少数据库的读写次数;为数据库中的若干列结构
设置索引列,并将索引列作为对齐列,以便在进行区间查找的时候,能够更快的进行寻道获取到本次所需数据的索引列,加快数据的查找效率。
[0057] 2. 当获取到数据更新指令时,判断数据更新类型,以便采取相应的更新方案,数据更新类型包括变更和追加,若数据更新的类型为追加,则进一步判断源数据的预留空间
是否足以存放需要追加的待更新数据,若源数据的预留空间足以存放需要追加的待更新数
据,则获取相应列结构的写锁,将待更新数据进行分解后添加至对应的列结构的源数据中,以更新相应的列结构中存储的源数据。
[0058] 3. 若数据更新的类型为追加,且若元数据的预留空间不足以存放需要追加的待更新数据时,则复制一份元数据和源数据到内存中,基于待更新数据对内存中的源数据进
行变更,并修改相应的源数据中的版本信息,基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,以在后续接收到读操作
信号时将更新后的列结构中的源数据复制至内存中,从而阻断旧版本的源数据的获取行
为。

附图说明

[0059] 图1是本申请一实施例中金融数据列式存储方法的一流程图;
[0060] 图2是本申请一实施例中金融数据列式存储方法中步骤S20的流程图;
[0061] 图3是本申请一实施例中金融数据列式存储方法中另一流程图;
[0062] 图4是本申请一实施例中金融数据列式存储方法中步骤S60的流程图;
[0063] 图5是本申请一实施例中金融数据列式存储方法中步骤S50的流程图;
[0064] 图6是本申请一实施例中金融数据列式存储方法中步骤S60的另一流程图;
[0065] 图7是本申请一实施例中列式存储金融数据读取方法的一流程图;
[0066] 图8是本申请一实施例中金融数据列式存储系统的一原理框图;
[0067] 图9是本申请一实施例中列式存储金融数据读取系统的一原理框图;
[0068] 图10是本申请一实施例中的设备示意图。

具体实施方式

[0069] 以下结合附图对本申请作进一步详细说明。
[0070] 在一实施例中,如图1所示,本申请公开了一种金融数据列式存储方法,该金融数据列式存储方法可应用于金融分析软件中,具体包括如下步骤:
[0071] S10:将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据。
[0072] 在本实施例中,列式存储引擎用于限定数据存储时以列式存储的方式进行存储;列结构是指列式存储形式数据的存储结构;源数据是指由原始金融数据分解后得到的数
据,元数据是指用于描述源数据的数据,主要是描述源数据的属性信息,以便用于实现如标识源数据存放位置、历史数据、文件记录等功能。
[0073] 具体地,由于股票投资用户在买卖股票时最关心的是股票的价格,因此,金融分析软件的数据库需要存储大量股票价格数据;在本实施例中,金融数据包括股票价格数据,而股票价格数据包括各支股票的开盘价、收盘价、最高价、最低价、平均价和实时价格等数据,其中,实时价格是指股票在上一价格更新节点所获取到的价格,优选的,各价格更新节点之间的时间差可以是一分钟或者五秒钟,具体可以根据数据库的容量、数据获取和处理能力所确定;将待存储的金融数据输入至列式存储引擎中,列式存储引擎将待存储的金融数据
分解为若干源数据,基于各源数据生成对应的元数据,并基于每一源数据和对应的元数据
形成一个列结构。
[0074] 具体地,当待存储的金融数据为股票“XX生物 SZXXXXXX”在1月1日的开盘价(100)、收盘价(120)、最高价(130)、最低价(90)和平均价(110)时,可将该金融数据分解为“XX生物”、“SZXXXXXX”、“ 1月1日”、“100”、“120”、“130”、“90”、“110” 等多个源数据,根据各源数据生成对应的元数据“XXXXXXXA(股票名称)”、“XXXXXXXB(股票代码)”、“XXXXXXXC(交易日)”、“XXXXXXXD(开盘价)”、“XXXXXXXE(收盘价)”、“XXXXXXXF(最高价)”、“XXXXXXXG(最低价)”、“XXXXXXXH(平均价)”;基于每一源数据和对应的元数据形成一个列结构,例如某一列结构为:“XX生物 XXXXXXXA”,此处的X并非指特定的字符,X可根据实际情况代表任意单个或多个字符。
[0075] S20:从若干列结构中复制元数据并存放在内存中,以形成元数据副本。
[0076] 在本实施例中,元数据副本是指将数据库中存储的列结构的元数据复制一份后并汇总所形成的副本。
[0077] 具体地,分别从每一个列结构中复制一份元数据,将复制的若干元数据进行汇总,形成元数据副本,将一份元数据副本存储至硬盘中,并复制一份只读的元数据副本存储至内存中,便于提高后续进行数据检索的效率。
[0078] 具体地,元数据具有占用存储空间小的特征,通常几十MB的元数据足以覆盖数以TB的源数据。
[0079] S30:将若干列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放。
[0080] 具体地,将若干列结构列式存储与硬盘中,且同一种源数据类型的列结构相邻存放,例如某一列结构为:“XX生物 XXXXXXAA”,其中元数据中最后一位“A”代表源数据类型为股票名称;当数据库中的列结构包括:“XX生物 XXXXXXAA”、“XX制药 XXXXXXBA”、“XX工业 XXXXXXCA”、“XX银行 XXXXXXDA”、“XX科技 XXXXXXEA”、“XX高新 XXXXXXFA”时,这些列结构在硬盘中的物理存储空间相邻,当用户需要读取同一源数据类型的列结构时,由于相邻列
结构的源数据类型相同,从而减少了硬盘I/O次数,达到提高数据查找效率的效果。
[0081] S40:为数据库中的若干列结构设置索引列,并将索引列作为对齐列。
[0082] 具体地,列结构按照不同的源数据类型,以列的组织形式存储,当用户要获取业务数据,则根据实际情况进行调取,在写入的时候,选择一个对齐列,保证在查找的时候数据的量级都是一致的,默认情况下对齐列就是索引列,因此进行区间查找的时候,就能够更快的进行寻道获取到本次所需数据的列索引,提高数据查找效率。
[0083] 具体地,对齐列是指主键索引和数据聚合,任何插入到存储介质的源数据都必须要与对齐列进行一次left‑join。
[0084] 在一实施例中,如图2所示,在步骤S20之后,还包括:
[0085] S21:基于若干列结构的元数据建立一个基于B+树的数据结构。
[0086] 具体地,根据由若干列结构的元数据汇总而形成的元数据副本建立一个基于B+树的数据结构,B+树的数据结构具有存储深度小,查找效率高的特点。
[0087] 在一实施例中,如图3所示,在步骤S40之后,金融数据列式存储方法还包括:
[0088] S50:获取数据更新指令,判断数据更新类型,数据更新类型包括变更和追加。
[0089] 具体地,当获取到数据更新指令时,判断数据更新的类型,数据更新类型包括变更和追加;其中,数据变更是指将原数据删除,以替换新数据;而数据追加则是在原数据的基础上增加新的数据。
[0090] S60:若数据更新类型为追加,则进一步判断源数据的预留空间是否充足。
[0091] 具体地,当数据更新类型为追加时,根据列结构对应的元数据信息判断该列结构中的源数据是否有充足的预留空间,以决定相应的数据更新方式。
[0092] S70:若源数据的预留空间充足,则获取列结构的写锁,将待更新数据进行分解后添加至对应的列结构的源数据中。
[0093] 在本实施例中,写锁是数据库管理上,锁的一种基本类型,又称为排他锁。
[0094] 具体地,若源数据的预留空间充足,则获取列结构的写锁,将待更新数据分解为若干更新源数据,将若干更新源数据添加至对应的列结构中源数据的预留空间中,以达到追加更新数据的功能。
[0095] 在一实施例中,如图4所示,在步骤S60之后,还包括:
[0096] S61:若源数据的预留空间不充足,则复制一份元数据和源数据到新的存储块中。
[0097] 具体地,若源数据的预留空间不充足,则复制一份元数据和对应的源数据到新的存储块中,以便后续在新的存储块中对源数据进行更新数据的追加,以解决源数据预留空
间不充足的问题。
[0098] S62:基于待更新数据对源数据进行变更,并修改元数据的版本信息。
[0099] 在本实施例中,元数据包括版本信息,用于标记对应的源数据的版本。
[0100] 具体地,在新的存储块中基于待更新数据对源数据进行追加,获取源数据的写锁,将待更新数据分解为若干更新源数据,将若干更新源数据分别与对应的原有源数据存储于同一存储块中,基于更新源数据与对应的原有源数据生成新的源数据,并对原有的元数据
中的版本信息进行修改,基于新的源数据和修改了版本信息后的元数据生成新的列结构,
以达到追加更新数据的功能。
[0101] 进一步地,在本次追加更新数据后,通过预留算法对新的列结构中源数据的存储空间预留有一定空间,以为后续的数据更新预留存储空间。
[0102] S63:基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。
[0103] 具体地,基于修改后的元数据对B+树进行树结构平衡,以使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,以在后续接收到读操作信号时将更新后的列结
构中的源数据复制至内存中,从而阻断旧版本的源数据的获取行为。
[0104] 在一实施例中,如图5所示,在步骤S50之后,还包括:
[0105] S51:若数据更新类型为变更,则复制一份元数据和源数据到新的存储块中。
[0106] 具体地,当数据更新类型为变更时,则复制一份元数据和对应的源数据到新的存储块中,以便后续在新的存储块中对源数据进行更新数据的变更,以实现对列结构中原有
的源数据进行变更的功能。
[0107] S52:基于待更新数据对源数据进行变更,并修改元数据的版本信息。
[0108] 具体地,在新的存储块中基于待更新数据对源数据进行变更,获取源数据的写锁,将待更新数据分解为若干更新源数据,将若干更新源数据分别存储于对应的原有源数据所在的存储块中,基于更新源数据生成新的源数据,并对原有的元数据中的版本信息进行修
改,基于新的源数据和修改了版本信息后的元数据生成新的列结构,以达到变更数据的功
能。
[0109] S53:基于修改后的元数据对B+树进行树结构平衡,使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,下一次通过元数据访问时,即可阻断旧的源数据,返回最新归档的源数据。
[0110] 具体地,基于修改后的元数据对B+树进行树结构平衡,以使修改后的元数据在B+树中的权重比修改前的元数据的权重更高,以在后续接收到读操作信号时将更新后的列结
构中的源数据复制至内存中,从而阻断旧版本的源数据的获取行为。
[0111] 在一实施例中,如图6所示,在步骤S63之后,还包括:
[0112] S64:定期获取元数据的版本信息,并结合元数据的用户引用计数信息进行判断,以对旧版本的元数据以及对应的源数据进行清理,以减少数据库中的数据量。
[0113] 在本实施例中,元数据包括用户引用计数信息,用户引用计数信息是指该元数据所对应的源数据被用户读取次数的信息。
[0114] 具体地,定期获取所有元数据中的版本信息,当检测到一个元数据存在新版本时,则获取该元数据中的用户引用计数信息,其中,用户引用计数信息中对源数据被用户读取次数是根据时间为周期进行统计的,优选的,一个统计周期可以是一天;若最近一个统计周期中,该元数据所对应的用户引用计数信息为零,则对该元数据以及该元数据对应的源数
据进行清理,以减少硬盘空间的占用,使硬盘空间可用于存储新的数据;同时对旧数据的清理也便于加快数据的查找效率。
[0115] 在一实施例中,如图7所示,本申请公开了一种列式存储金融数据读取方法,具体包括如下步骤:
[0116] S80:获取金融数据读取信号,从内存中查询金融数据读取信号对应的元数据。
[0117] 在本实施例中,金融数据读取信号是指由用户终端所发出的金融数据读取请求。
[0118] 具体地,当获取到金融数据读取信号时,从内存的元数据副本中查询到金融数据读取信号对应的元数据,以便后续基于元数据索引到用户所需数据的存储位置。
[0119] S90:获取读锁,基于元数据对硬盘进行一次寻道,以定位对应的列结构。
[0120] 在本实施例中,读锁是指可被多个线程所持有的共享锁,获得读锁的线程只能读取数据,不能修改数据。
[0121] 具体地,获取读锁,再基于元数据对硬盘进行寻道,以定位元数据所对应的列结构在硬盘中的存储位置,以便后续供用户读取该列结构内的源数据。
[0122] S100:将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0123] 具体地,定位到用户所需数据对应的列结构之后,将该列结构中的源数据复制到内存的缓存中,以供用户获取,同时其他用户也能够获取该源数据。
[0124] 应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
[0125] 在一实施例中,如图8所示,提供一种金融数据列式存储系统,包括列结构生成模块、元数据存储模块、列结构存储模块和对齐列设置模块,该金融数据列式存储系统与上述实施例中金融数据列式存储方法相对应,各功能模块的详细说明如下:
[0126] 列结构生成模块,用于将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置
和类型的元数据;
[0127] 元数据存储模块,用于从若干列结构中复制元数据并存放在内存中,以形成元数据副本;
[0128] 列结构存储模块,用于将若干列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;
[0129] 对齐列设置模块,用于为数据库中的若干列结构设置索引列,并将索引列作为对齐列。
[0130] 在一实施例中,如图9所示,提供一种列式存储金融数据读取系统,包括元数据寻找模块、列结构寻找模块模块和源数据复制模块,该列式存储金融数据读取系统与上述实
施例中列式存储金融数据读取方法相对应,各功能模块的详细说明如下:
[0131] 元数据寻找模块,用于获取金融数据读取信号,从内存中查询金融数据读取信号对应的元数据;
[0132] 列结构寻找模块,用于获取读锁,基于元数据对硬盘进行一次寻道,以定位对应的列结构;
[0133] 源数据复制模块,用于将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0134] 关于金融数据列式存储系统的具体限定可以参见上文中对于金融数据列式存储方法的限定,关于列式存储金融数据读取系统的具体限定可以参见上文中对于列式存储金
融数据读取方法的限定,在此不再赘述;上述金融数据列式存储系统和列式存储金融数据
读取系统中的各个模块可全部或部分通过软件、硬件及其组合来实现;上述各模块可以硬
件形式内嵌于或独立于计算机设备中的处理器中,也可以是以软件形式存储于计算机设备
中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0135] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储金融数据、列结构、元数据副本、更新数据、版本信息和用户引用计数信息。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序
被处理器执行时以实现一种金融数据列式存储方法和一种列式存储金融数据读取方法。
[0136] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
[0137] S10:将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;
[0138] S20:从若干列结构中复制元数据并存放在内存中,以形成元数据副本;
[0139] S30:将若干列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;
[0140] S40:为数据库中的若干列结构设置索引列,并将索引列作为对齐列。
[0141] 以及:
[0142] S80:获取金融数据读取信号,从内存中查询金融数据读取信号对应的元数据;
[0143] S90:获取读锁,基于元数据对硬盘进行一次寻道,以定位对应的列结构;
[0144] S100:将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0145] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0146] S10:将待存储的金融数据输入至列式存储引擎中,使金融数据形成若干列结构,列结构包括由金融数据分解而成的源数据以及用于标识源数据存放位置和类型的元数据;
[0147] S20:从若干列结构中复制元数据并存放在内存中,以形成元数据副本;
[0148] S30:将若干列结构列式存储于硬盘中,同一种源数据类型的列结构相邻存放;
[0149] S40:为数据库中的若干列结构设置索引列,并将索引列作为对齐列。
[0150] 以及:
[0151] S80:获取金融数据读取信号,从内存中查询金融数据读取信号对应的元数据;
[0152] S90:获取读锁,基于元数据对硬盘进行一次寻道,以定位对应的列结构;
[0153] S100:将列结构中的源数据复制至内存中以供发出读操作信号的用户获取。
[0154] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机
可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0155] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0156] 以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域普通技术人员应当理解;其依然可以对前述各实
施例所记载的技术方案进行修改,或者对其中部分特征进行等同替换;而这些修改或者替
换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在
本申请的保护范围之内。