CN116894041B - 数据存储方法、装置、计算机设备及介质 - Google Patents
数据存储方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN116894041B CN116894041B CN202311140141.9A CN202311140141A CN116894041B CN 116894041 B CN116894041 B CN 116894041B CN 202311140141 A CN202311140141 A CN 202311140141A CN 116894041 B CN116894041 B CN 116894041B
- Authority
- CN
- China
- Prior art keywords
- data
- layer
- storage
- subset
- subsets
- 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
Links
- 238000013500 data storage Methods 0.000 title claims abstract description 61
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000007726 management method Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 9
- 230000007423 decrease Effects 0.000 abstract 1
- 238000004458 analytical method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000005192 partition Methods 0.000 description 5
- 230000015556 catabolic process Effects 0.000 description 4
- 238000006731 degradation reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000010076 replication Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数据存储方法、装置、计算机设备及介质,涉及数据库技术领域,方法包括接收首次进行存储的数据存放在第零层,当达到预设条件时,将数据合并,形成若干个第一数据子集,形成热层数据,以行存方式本地存储;当第一数据子集的数据量达到预设条件时,将最先形成的第一数据子集合并为第二数据子集,转移至第一层,直至第X层,形成温层数据,以列存方式本地存储;当第二数据子集的数据量达到预设条件时,将最先形成的第二数据子集合并形成第三数据子集,并转移至第X+1层,视为冷层数据,以行列混存方式对象存储;热层、温层和冷层数据进入***的时间逐渐增加或访问频度逐渐降低。该方案提高了数据存储效率。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据存储方法、装置、计算机设备及介质。
背景技术
数据库一般分为操作型数据库和分析型数据库,比如 OLTP和 OLAP就是这样的分类方法。这种分离设计的原因是两个原因,第一个原因是业务模式不同决定了处理能力的不同:事务需要高并发、随机访问,对隔离性要求很高;而分析处理的并发度要低很多,但查询操作很复杂,顺序访问多。另一个原因则是数据生命周期的不同:事务处理是当前的数据,而分析的则主要是历史数据。
当前正在流行的HTAP或者更广一点的超融合数据库解决了第一个问题,即计算和存储引擎的技术演进,使得在同一个数据库里能够处理两种不同的业务,但数据生命周期管理仍有较大的优化空间。
另外,对象存储具有高可用、按使用计费、随时随地可用以及无缝的性能和空间扩容能力,这使得它取代了磁盘和磁带介质,成为了冷存储的理想存储。
由于数据库本身长期的发展历史,很多数据支持以外挂的方式将数据转储到对象存储上。以最为强大的开源数据库PostgreSQL为例,它有如下几种方式使用S3存储:
使用pg_dump和AWS CLI:通过使用pg_dump命令将数据库导出为SQL文件,然后使用AWS CLI将SQL文件上传到S3存储桶中,这是一种简单而常见的方法。
使用AWS Data Pipeline:AWS Data Pipeline是一种托管服务,可用于自动化数据转移和转储。可以配置一个数据管道,将PostgreSQL数据源与S3目标连接起来,并设置适当的数据转移和转储活动。
使用第三方工具和库:有一些第三方工具和库可以帮助将PostgreSQL数据转储到S3。例如,pg_s3插件可以直接将查询结果或表数据导出到S3存储桶中。
上述方式都是将数据导出并转储,无法原生访问。数据的及时性、一致性、出错处理及回读的效率都难以保证。
有些数据库,像Lindorm,它是一个从 HBase 演化而来的一种一些数据库。它采用HDFS 来管理对象存储上的空间,所有操作要经过文件***的访问,其最终的性能不仅受限于对象存储的能力,还受限于 HDFS 的本身的元数据管理开销,性能受到一定的影响。
发明内容
有鉴于此,本发明实施例提供了一种数据存储方法,以解决现有技术中数据存储效率低的技术问题。该方法包括:
接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
将所述热层数据以行存方式进行本地存储;
当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
将所述温层数据以列存方式进行本地存储;
当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
本发明实施例还提供了一种数据存储装置,以解决现有技术中数据存储效率低的技术问题。该装置包括:
热层数据形成模块,用于接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
热层数据存储模块,用于将所述热层数据以行存方式进行本地存储;
温层数据形成模块,用于当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
温层数据存储模块,用于将所述温层数据以列存方式进行本地存储;
冷层数据形成模块,用于当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
冷层数据存储模块,用于将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据存储方法,以解决现有技术中数据存储效率低的技术问题。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据存储方法的计算机程序,以解决现有技术中数据存储效率低的技术问题。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个第一数据子集,将第零层中的数据视为热层数据;将热层数据以行存方式进行本地存储;当热层数据中的第一数据子集的数据量达到第二预设条件时,将热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将第二数据子集转移至存储空间的第一层,持续接收数据并形成第二数据子集,直到形成第X层,第一层至第X层的每一层中含有若干个第二数据子集,将第一层至第X层中的数据视为温层数据,X为自然数;将温层数据以列存方式进行本地存储;当温层数据中的第二数据子集的数据量达到第三预设条件时,将温层数据中最先形成的若干个第二数据子集合并形成第三数据子集,并将第三数据子集转移至存储空间的第X+1层,将第X+1层中的数据视为冷层数据;将冷层数据以行列混存方式进行对象存储;其中,热层数据、温层数据和冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。本申请中通过将数据按照进入***的时间和访问频度分为热层、温层和冷层等多层,每一层采取不同的存储模式,层级之间通过合并或由本地存储到对象存储的转储实现格式转化,提高了数据存储效率,实现了高效的空间管理和优化访问。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的数据存储方法的流程图;
图2是本发明实施例提供的数据存储方法中各层数据的存储示意图;
图3是本发明实施例提供的对象存储的数据布局示意图;
图4是本发明实施例提供的一种计算机设备的结构框图;
图5是本发明实施例提供的一种数据存储装置的结构框图。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本发明实施例中,提供了一种数据存储方法,如图1所示,该方法包括:
步骤S101、接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
步骤S102、将所述热层数据以行存方式进行本地存储;
步骤S103、当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
步骤S104、将所述温层数据以列存方式进行本地存储;
步骤S105、当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
步骤S106、将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
需要说明的是,热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加是指按时间先后顺序,所述冷层数据进入***的时间最长,所述热层数据进入***的时间最短,也即热层数据是最新进入***的,冷层数据是最早进入***的;热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加是指按照访问频度,所述冷层数据是访问频度最低的,所述热层数据是访问频度最高的,也即热层数据是访问最活跃的数据。
在本实施例中,热层数据采用按行存储的方式,类似于 PostgreSQL中的 heap表,温层数据,可以采用列存方式(比如面向时序和分析的场景),当降级到对象存储上之后,可以采用行列混存的模式。通过将数据按照进入***的时间和访问频度分为热层、温层和冷层等多层,每一层采取不同的存储模式,层级之间通过合并或由本地存储到对象存储的转储实现格式转化,提高了数据存储效率,实现了高效的空间管理和优化访问。
具体实施时,参照图2,具体的热层数据、温层数据和冷层数据的划分过程如下:
将数据划分成若干个局部有序的数据子集(称之为Run),每一层包含若干个Run。
第零层是热层数据,它对于首次进入***的一批数据进行排序,以行级记录的形式存放起来,当第零层数据达到一定的数量,或总的数据量后(第一预设条件),就会触发合并,整体合并成1层的一个Run。
第1~X层数据是温层数据,X可以根据需要进行更改配置。温层数据采用列存方式存储,即每一列的数据连续放在一起。可以通过额外的元数据用来区分为更小的访问块。当一层的Run累积到一定数据量(达到第二预设条件),就会选择其中的一部分,排序合并到下一层次,直到达到X层。如图2所示,温层数据除了一般放在本地,也可以放在对象存储上。
X+1层及以下是冷层数据,冷层数据放在对象存储,采用行列混存的模式,即将一个Run的数据拆成若干个对象存储,在一个对象里采用完全列存的方式来存储取,不同的对象之间以行存的方式存储。通过这样设置,可以实现读取一个对象就可以得到这批数据的全部内容,对象存储具有数据访问速度高效、灵活的优势。
具体实施时,所有的存储形态使用同一套元数据管理机制,采用相近的元数据信息来管理,即数据存储方法还包括:
建立元数据管理表,在所述元数据管理表中记录每层中各个数据子集的元数据以及用于还原每层中各个数据子集的数据块的描述信息,其中,每个数据子集包括若干个子单元,每个子单元中的一列数据为一个数据块。
在统一的分层存储的结构下,对象存储只是其中的一层。通过对元数据的重新整理实现了元数据的统一管理,对象存储的元数据和本地存储差别很小,而行列混合/列存也可以纳入到统一的元数据管理体系里去,这使得对象存储的转储和访问变得很自然和丝滑,充分利用对象存储本身的能力。并且,本地存储和对象访问采用一致方式访问,软件维护更加容易。
具体实施时,对于温层数据,由于元数据统一,也可以直接放到对象存储上,即本申请的数据存储方法还包括:
将所述温层数据以列存方式进行对象存储。
具体的,本申请涉及到的元数据主要是针对一个表的,它具体包括以下内容:
(1)Run的元数据。它记录在表的最头部的位置,包括了所有Run是否被用的状态,以及每个层上有哪些Run,每个Run中包含哪些文件等信息。
(2)Run内的数据块的描述信息。每个Run分成若干个子单元,每个子单元被命名为range,range是固定大小的一组记录的集合(最末尾的range可以不满的)。一个range里同一列的数据称为一个stripe,也就是数据块,数据块是独立压缩和IO的单位。数据块的描述信息描述了一个数据块在存储介质上的位置、长度、记录条数和空数据的信息等。根据数据块的描述信息就可以读出并还原出这一列的数据。对于对象存储和本地文件存储,数据块的描述信息记录的唯一的区别是数据块存放位置不同。对于本地存储,数据块的描述信息记录的是文件,而对于对象存储,它记录的时具体的信息。
(3)索引信息。对于每一个range,计算索引列的min/max信息。如果查询条件里带了相关列的比较条件,则可以先转化为对min/max区间的判断,如果不命中,则可以跳过,从而加快了数据查询效率。
本方案中的统一元数据管理,既支持将数据放在本地的高速设备上,也支持放在独立的元数据服务上。因此,既支持私有化部署,即本地数据库集群+对象存储集群,也支持云化部署,即元数据集群+对象存储服务。
具体实施时,所述将所述冷层数据以行列混存方式进行对象存储,包括:
当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集确定为需要转储到对象存储上的数据子集;
对所述若干个第二数据子集依次执行以下转储步骤:
(1)在对象存储上建立一个所述第三数据子集,并设置该第三数据子集初始的对象ID为0;
(2)在所述元数据管理表中读取所述第二数据子集的每个数据块的描述信息;
(3)根据每个数据块的描述信息(stripe的描述信息),将所述第二数据子集的每个数据块的数据读出并写入到对象存储的缓冲池(buffer)中;
(4)当所述对象存储的缓冲池中的数据量未达到第三预设条件时,则直接返回当前的对象ID;
(5)所述缓冲池持续接收所述第二数据子集的数据并对所述第二数据子集进行合并,直至所述缓冲池中的数据量达到第三预设条件时,则先调用对象存储的驱动程序(driver)将所述缓冲池中的数据写入所述第三数据子集,将数据填入缓存后再返回加1的对象ID;
(6)将所述第二数据子集的每个数据块的描述信息以及返回的对象ID存放于元数据缓冲池中;
(7)当所有需要转储到对象存储上的第二数据子集均写入到对象存储后,将所述元数据缓冲池中的所述第二数据子集的每个数据块的描述信息以及返回的对象ID写入到所述元数据管理表中。
在具体的实施例中,在步骤(1)之前,包括***启动周期性的描述进程,根据分区条件和表级策略检查是否要发起降级操作,如果达到降级条件,就会产生一个降级任务;降级任务首先会找出需要转储的Run,针对每一个Run执行转储步骤。在步骤(7)之后,还包括:由于数据是一对一的转储,数据索引信息并没有改变,可以直接将查找数据的索引信息修改为对新run的索引。
在一个实施例中,在步骤(5)之后还包括:将所述缓冲池中的数据写入预写式日志,此步骤是针对支持主从复制的***。
对于支持主从复制的***,还可以直接将数据写两份到对象存储。主从复制***(比如PostgreSQL)需要有两份独立的数据,以保证完全不依赖于另外一台服务器及其数据的可用性。这有三个优势:1)写入日志、日志检验、日志传输、日志回放都需要占用较大的内存、网络、CPU资源,还大大延长了执行时间;2)日志写入是独占式,它挤占了宝贵的日志资源,影响了其它日志的写入。3)写入对象存储可能会出错,或者偶尔很慢,这给假设本地磁盘相对较稳的日志写入带来困难的错误处理,阻塞日志回放。
在另一个实施例中,当数据还没有来得及合并到指定层次时,需要先触发合并任务,再生成转储任务。
具体实施时,当数据满足降级的条件时(第三预设条件),可以选择将数据转储到对象存储中。本方法的特点是将分区技术和降级管理结合起来,从而将数据降级变成一个冷数据转储的问题。
例如,通过按时间分区,将一定范围的数据限制在某一张分区表上,而当该分区的最晚时间超过某一阈值时(视具体的策略而定),则意味着该分区上的数据“足够冷”,则这部分数据就可以比较完整地转储到对象存储上去。一种典型的策略是在建表时作如下指定:(TTL='ts INTERVAL + 1m TABLESPACE s3')。其中 TTL是option的key值,ts是时间列,INTERVAL + 1m指时间戳距今超过1个月。对于分区表而言,按最小的时间戳计算。降级存储会放到单独的表空间,下面对 S3 的表空间设置进行单独说明。
参照图3,给出了对象存储的数据布局,用bucket/segno/dbid/ database_id/tableid/runid/objid来唯一标识一个对象,这里的bucket是存储桶,segno 是指 MPP 数据库的处理segment server的编号,它成对出现(主从模式),dbid是MPP数据库的成员编号,segno和dbid一起唯一标识一个子节点, database_id是数据库的ID,tableid是表的ID,因为run是指一个表的子集,因此要把databaseid和tableid都要放名字里,runid是Run的ID,即数据子集的ID,objid是对象的ID。另外,指定的bucket是该数据库集群所独占的。
基于本申请的数据存储方法存储的数据可以实现高效查询,主要从以下几个方面体现:
索引扫描方面,查询对于存储引擎的操作会具体到对一批数据的顺序扫描和基于索引的扫描上。本申请支持索引扫描,即通过索引找到一个数据块后,直接读取对象存储的该range数据。对于顺序扫描,则可以直接读取整个对象的数据;
缓存管理方面,对象存储的延时较本地存储要高很多,但带宽的差距要小的多。将访问较为频繁的数据先缓存在本地能缓解延时的问题,缓存采用 LRU 机制,以block为单位进行淘汰。缓存采用全局共享,即本申请的实施例中所有使用S3作为降级存储的表均可使用,dbid+relid+objid+blockid构成了获取高速缓存数据(cache数据)的key;有可能单个range超过了一个block,或者要连续访问多个 range。
缓存提供连续cache的能力,即一次性缓存若干个块。缓存空间不保证持久性,数据库启动需要重新读取数据。考虑到未来实现存储计算分离后,本地缓存的有效性也需要启动后重新校验,且计算节点并非在同一台物理机上启动,持久化的需求并不强。
对象存储,数据预取。无论是顺序扫描,还是索引扫描都只是访问对象中的一部分数据,可以通过对访问模式(顺序/索引)和访问列数来推算数据读取的范围,以减少访问对象存储的次数。
因此,本申请的数据存储方法可以起到如下效果:1)在一个统一的分层存储体系内支持对象存储;2)转储极为高效,充分利用对象存储本身的能力;3)访问方便,本地存储和对象访问采用一致方式访问,软件维护容易;4)查询高效,通过行列混存储,既支持分析模式查询,查询很多数据,也便于只读取部分数据;5)高效访问对象存储,通过精细化的预取策略,将对象存储的IO访问变到最少;6)高可靠行,通过直写对象存储,而不是通过日志的方式,既减少资源占用,更大大提高了***的可靠性;7)既支持私有化部署,即本地数据库集群+对象存储集群,也支持云化部署,即元数据集群+对象存储服务。
需要说明的是,本方法不仅用于对象存储降级,任何其它形式的共享存储均可使用;当采用日志方式同步数据时,传统的备份存储,比如基于磁盘的备份***也可以使用;当数据除了一般的热、温、冷,还可以细分为更多层时,本方法同样适应,比如对象存储还可以分层极冷的层次,可以进一步按对象存储的拷贝即可。
在本实施例中,提供了一种计算机设备,如图4所示,包括存储器401、处理器402及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据存储方法。
具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。
在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据存储方法的计算机程序。
具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
基于同一发明构思,本发明实施例中还提供了一种数据存储装置,如下面的实施例所述。由于数据存储装置解决问题的原理与数据存储方法相似,因此数据存储装置的实施可以参见数据存储方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图5是本发明实施例的数据存储装置的一种结构框图,如图5所示,包括:热层数据形成模块501、热层数据存储模块502、温层数据形成模块503、温层数据存储模块504、冷层数据形成模块505、冷层数据存储模块506,下面对该结构进行说明。
热层数据形成模块501,用于接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
热层数据存储模块502,用于将所述热层数据以行存方式进行本地存储;
温层数据形成模块503,用于当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
温层数据存储模块504,用于将所述温层数据以列存方式进行本地存储;
冷层数据形成模块505,用于当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
冷层数据存储模块506,用于将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
具体实施时,所述数据存储装置还包括:
元数据管理表建立模块,用于建立元数据管理表,在所述元数据管理表中记录每层中各个数据子集的元数据以及用于还原每层中各个数据子集的数据块的描述信息,其中,每个数据子集包括若干个子单元,每个子单元中的一列数据为一个数据块。
具体实施时,冷层数据存储模块506还用于:
当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集确定为需要转储到对象存储上的数据子集;
对所述若干个第二数据子集依次执行以下转储步骤:
在对象存储上建立一个所述第三数据子集,并设置该第三数据子集初始的对象ID为0;
在所述元数据管理表中读取所述第二数据子集的每个数据块的描述信息;
根据每个数据块的描述信息,将所述第二数据子集的每个数据块的数据读出并写入到对象存储的缓冲池中;
当所述对象存储的缓冲池中的数据量未达到第三预设条件时,则直接返回当前的对象ID;
所述缓冲池持续接收所述第二数据子集的数据并对所述第二数据子集进行合并,直至所述缓冲池中的数据量达到第三预设条件时,则将所述缓冲池中的数据写入所述第三数据子集,再返回加1的对象ID;
将所述第二数据子集的每个数据块的描述信息以及返回的对象ID存放于元数据缓冲池中;
当所有需要转储到对象存储上的第二数据子集均写入到对象存储后,将所述元数据缓冲池中的所述第二数据子集的每个数据块的描述信息以及返回的对象ID写入到所述元数据管理表中。
具体实施时,冷层数据存储模块506中的将所述缓冲池中的数据写入所述第三数据子集,包括:
采用列存方式将所述缓冲池中的数据写入所述第三数据子集中,不同的所述第三数据子集之间采用行存方式进行对象存储。
具体实施时,冷层数据存储模块506中的在所述将所述缓冲池中的数据写入所述第三数据子集中,再返回加1的对象ID的步骤之后,还包括:
将所述缓冲池中的数据写入预写式日志。
具体实施时,数据存储装置还包括:
计算模块,用于计算每个所述子单元的最大值和最小值,将所述最大值和所述最小值作为查找数据的索引信息;
记录模块,用于将与每个所述子单元对应的所述最大值和所述最小值记录于所述元数据管理表中。
具体实施时,数据存储装置还包括:
第二温层数据存储模块,用于将所述温层数据以列存方式进行对象存储。
本发明实施例实现了如下技术效果:接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个第一数据子集,将第零层中的数据视为热层数据;将热层数据以行存方式进行本地存储;当热层数据中的第一数据子集的数据量达到第二预设条件时,将热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将第二数据子集转移至存储空间的第一层,持续接收数据并形成第二数据子集,直到形成第X层,第一层至第X层的每一层中含有若干个第二数据子集,将第一层至第X层中的数据视为温层数据,X为自然数;将温层数据以列存方式进行本地存储;当温层数据中的第二数据子集的数据量达到第三预设条件时,将温层数据中最先形成的若干个第二数据子集合并形成第三数据子集,并将第三数据子集转移至存储空间的第X+1层,将第X+1层中的数据视为冷层数据;将冷层数据以行列混存方式进行对象存储;其中,热层数据、温层数据和冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。本申请中通过将数据按照进入***的时间和访问频度分为热层、温层和冷层等多层,每一层采取不同的存储模式,层级之间通过合并或由本地存储到对象存储的转储实现格式转化,提高了数据存储效率,实现了高效的空间管理和优化访问。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据存储方法,其特征在于,包括:
接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
将所述热层数据以行存方式进行本地存储;
当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
将所述温层数据以列存方式进行本地存储;
当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
2.如权利要求1所述的数据存储方法,其特征在于,所述方法还包括:
建立元数据管理表,在所述元数据管理表中记录每层中各个数据子集的元数据以及用于还原每层中各个数据子集的数据块的描述信息,其中,每个数据子集包括若干个子单元,每个子单元中的一列数据为一个数据块。
3.如权利要求2所述的数据存储方法,其特征在于,所述将所述冷层数据以行列混存方式进行对象存储,包括:
当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集确定为需要转储到对象存储上的数据子集;
对若干个所述第二数据子集依次执行以下转储步骤:
在对象存储上建立一个所述第三数据子集,并设置该第三数据子集初始的对象ID为0;
在所述元数据管理表中读取所述第二数据子集的每个数据块的描述信息;
根据每个数据块的描述信息,将所述第二数据子集的每个数据块的数据读出并写入到对象存储的缓冲池中;
当所述对象存储的缓冲池中的数据量未达到第三预设条件时,则直接返回当前的对象ID;
所述缓冲池持续接收所述第二数据子集的数据并对所述第二数据子集进行合并,直至所述缓冲池中的数据量达到第三预设条件时,则将所述缓冲池中的数据写入所述第三数据子集,再返回加1的对象ID;
将所述第二数据子集的每个数据块的描述信息以及返回的对象ID存放于元数据缓冲池中;
当所有需要转储到对象存储上的第二数据子集均写入到对象存储后,将所述元数据缓冲池中的所述第二数据子集的每个数据块的描述信息以及返回的对象ID写入到所述元数据管理表中。
4.如权利要求3所述的数据存储方法,其特征在于,将所述缓冲池中的数据写入所述第三数据子集,包括:
采用列存方式将所述缓冲池中的数据写入所述第三数据子集中,不同的所述第三数据子集之间采用行存方式进行对象存储。
5.如权利要求3所述的数据存储方法,其特征在于,在所述将所述缓冲池中的数据写入所述第三数据子集中,再返回加1的对象ID的步骤之后,还包括:
将所述缓冲池中的数据写入预写式日志。
6.如权利要求2所述的数据存储方法,其特征在于,所述方法还包括:
计算每个所述子单元的最大值和最小值,将所述最大值和所述最小值作为查找数据的索引信息;
将与每个所述子单元对应的所述最大值和所述最小值记录于所述元数据管理表中。
7.如权利要求1所述的数据存储方法,其特征在于,所述方法还包括:
将所述温层数据以列存方式进行对象存储。
8.一种数据存储装置,其特征在于,包括:
热层数据形成模块,用于接收首次进行存储的数据并以行记录的形式存放在存储空间的第零层,当接收的数据量达到第一预设条件时,将接收的数据合并为一个第一数据子集,并持续接收数据并形成若干个所述第一数据子集,将所述第零层中的数据视为热层数据;
热层数据存储模块,用于将所述热层数据以行存方式进行本地存储;
温层数据形成模块,用于当所述热层数据中的第一数据子集的数据量达到第二预设条件时,将所述热层数据中最先形成的若干个第一数据子集合并形成第二数据子集,并将所述第二数据子集转移至存储空间的第一层,持续接收数据并形成所述第二数据子集,直到形成第X层,所述第一层至所述第X层的每一层中含有若干个所述第二数据子集,将所述第一层至所述第X层中的数据视为温层数据,所述X为自然数;
温层数据存储模块,用于将所述温层数据以列存方式进行本地存储;
冷层数据形成模块,用于当所述温层数据中的第二数据子集的数据量达到第三预设条件时,将所述温层数据中最先形成的若干个所述第二数据子集合并形成第三数据子集,并将所述第三数据子集转移至存储空间的第X+1层,将所述第X+1层中的数据视为冷层数据;
冷层数据存储模块,用于将所述冷层数据以行列混存方式进行对象存储;
其中,所述热层数据、所述温层数据和所述冷层数据的进入***的时间逐渐增加或者访问频度逐渐降低。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的数据存储方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7中任一项所述的数据存储方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311140141.9A CN116894041B (zh) | 2023-09-06 | 2023-09-06 | 数据存储方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311140141.9A CN116894041B (zh) | 2023-09-06 | 2023-09-06 | 数据存储方法、装置、计算机设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116894041A CN116894041A (zh) | 2023-10-17 |
CN116894041B true CN116894041B (zh) | 2023-11-17 |
Family
ID=88311064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311140141.9A Active CN116894041B (zh) | 2023-09-06 | 2023-09-06 | 数据存储方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116894041B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117725095B (zh) * | 2024-02-07 | 2024-05-03 | 北京四维纵横数据技术有限公司 | 面向数据集的数据存储和查询方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
CN111984696A (zh) * | 2020-07-23 | 2020-11-24 | 深圳市赢时胜信息技术股份有限公司 | 一种新型数据库和方法 |
CN115544014A (zh) * | 2022-10-20 | 2022-12-30 | 东北大学 | 一种数据库中的数据合并方法、装置以及设备 |
CN116166691A (zh) * | 2023-04-21 | 2023-05-26 | 中国科学院合肥物质科学研究院 | 一种基于数据划分的数据归档***、方法、装置及设备 |
CN116312980A (zh) * | 2023-01-18 | 2023-06-23 | 东软医疗***股份有限公司 | 数据传输的方法及装置、ct机及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9020892B2 (en) * | 2011-07-08 | 2015-04-28 | Microsoft Technology Licensing, Llc | Efficient metadata storage |
US9514174B2 (en) * | 2012-06-30 | 2016-12-06 | Microsoft Technology Licensing, Llc | Classification of data in main memory database systems |
-
2023
- 2023-09-06 CN CN202311140141.9A patent/CN116894041B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
CN111984696A (zh) * | 2020-07-23 | 2020-11-24 | 深圳市赢时胜信息技术股份有限公司 | 一种新型数据库和方法 |
CN115544014A (zh) * | 2022-10-20 | 2022-12-30 | 东北大学 | 一种数据库中的数据合并方法、装置以及设备 |
CN116312980A (zh) * | 2023-01-18 | 2023-06-23 | 东软医疗***股份有限公司 | 数据传输的方法及装置、ct机及存储介质 |
CN116166691A (zh) * | 2023-04-21 | 2023-05-26 | 中国科学院合肥物质科学研究院 | 一种基于数据划分的数据归档***、方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116894041A (zh) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943867B (zh) | 支持异构存储的高性能层次化存储*** | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
CN101556557B (zh) | 一种基于对象存储设备的对象文件组织方法 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和*** | |
CN111309270A (zh) | 一种持久性内存键值存储*** | |
US8176233B1 (en) | Using non-volatile memory resources to enable a virtual buffer pool for a database application | |
CN106708427A (zh) | 一种适用于键值对数据的存储方法 | |
CN108021717B (zh) | 一种轻量级嵌入式文件***的实现方法 | |
Carstoiu et al. | Hadoop hbase-0.20. 2 performance evaluation | |
CN113377868B (zh) | 一种基于分布式kv数据库的离线存储*** | |
US9189494B2 (en) | Object file system | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
US20150254320A1 (en) | Using colocation hints to facilitate accessing a distributed data storage system | |
CN107003814A (zh) | 存储***中的有效元数据 | |
CN104317736B (zh) | 一种分布式文件***多级缓存实现方法 | |
CN110825324A (zh) | 混合存储的控制方法及混合存储*** | |
CN102117248A (zh) | 一种缓存***和在缓存***中缓存数据的方法 | |
CN116894041B (zh) | 数据存储方法、装置、计算机设备及介质 | |
CN108108476A (zh) | 高可靠分布式日志***的工作方法 | |
CN100437524C (zh) | 用于将文件的数据存储在存储块中的高速缓存方法及*** | |
CN111159176A (zh) | 一种海量流数据的存储和读取的方法和*** | |
CN110858210B (zh) | 数据查询方法及装置 | |
CN114817341A (zh) | 访问数据库的方法和装置 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
CN107346209B (zh) | 一种多磁盘聚合式数据存储***及其实现方法与应用方法 |
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 |