CN115408149A - 一种时序存储引擎内存设计及分配方法及装置 - Google Patents
一种时序存储引擎内存设计及分配方法及装置 Download PDFInfo
- Publication number
- CN115408149A CN115408149A CN202210914023.8A CN202210914023A CN115408149A CN 115408149 A CN115408149 A CN 115408149A CN 202210914023 A CN202210914023 A CN 202210914023A CN 115408149 A CN115408149 A CN 115408149A
- Authority
- CN
- China
- Prior art keywords
- memory
- block
- data
- size
- time sequence
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 22
- 239000000872 buffer Substances 0.000 claims abstract description 18
- 238000011084 recovery Methods 0.000 claims abstract description 11
- 230000001680 brushing effect Effects 0.000 claims abstract description 7
- 238000004064 recycling Methods 0.000 claims description 7
- 230000002688 persistence Effects 0.000 claims description 3
- 230000002159 abnormal effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库管理技术领域,具体提供了一种时序存储引擎内存设计及分配方法,时序数据库存储引擎对外提供的存储数据的最小单元是ObjectTable,一个ObejctTable在内存中有多个block用于存储一个时间段内的时序数据,当一个block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;创建block时,需要根据计算得到的block大小申请对应的内存,每次block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。与现有技术相比,本发明提升了时序数据库内存的利用率,方便数据的写入和查询,防止出现数据写入异常的场景出现。
Description
技术领域
本发明涉及数据库管理技术领域,具体提供一种时序存储引擎内存设计及分配方法及装置。
背景技术
时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。时序数据库(Time Series Database,TSDB)是优化用于摄取、处理和存储时间戳数据的数据库,专门用于存储和处理时间序列数据。时序数据的主要特点是写多读少,要求支持秒级和毫秒级甚至纳秒级的高频写入,查询通常是多维聚合查询,对查询的延迟要求比较高。
时序数据可能包括来自服务器和应用程序的指标、来自物联网传感器的读数、网站或应用程序上的用户交互或金融市场上的交易活动。来自同一设备的时序数据的类型是一致的。
目前主流的时序数据库,存储数据的内存块大小都是固定的,由于时序数据的采集频率和数据类型都不一致,固定的内存块大小无法满足时序数据的特点。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的时序存储引擎内存设计及分配方法。
本发明进一步的技术任务是提供一种设计合理,安全适用的时序存储引擎内存设计及分配装置。
本发明解决其技术问题所采用的技术方案是:
一种时序存储引擎内存设计及分配方法,时序数据库存储引擎对外提供的存储数据的最小单元是ObjectTable,一个所述ObejctTable在内存中有多个block用于存储一个时间段内的时序数据,当一个所述block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;
创建所述block时,需要根据计算得到的block大小申请对应的内存,每次所述block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。
进一步的,对于写入的时序数据,使用存储内部的编解码策略,保持每条数据长度固定,每条数据的头部增加bitmap记录值为空的列;
一条数据由多个列或属性组成,在时序数据场景中,第一个属性为时间戳,第二个属性是一个bitmap,记录值为空的列,之后的属性都是value。
进一步的,所述block的创建是在数据写入时,首先计算得到一条数据的长度ValueLength,根据所述ValueLength计算出所述block存储数据需要的大小,并在block创建时申请对应的内存空间,其中一条数据的计算方式为:
ValueLength=TimeStamp.Size()+BitMap.Size()+ColumnValue.Size()。
进一步的,根据元数据中的时间跨度阈值及写入数据的时间间隔,估算得到block中需要存储的数据条数,根据需要存储的数据条数和数据大小,计算得到block需要分配的内存大小。
进一步的,校验所述内存大小是否在设置的内存阈值之间,超出时,需要将申请的内存大小置为最大或者最小内存阈值,申请连续内存空间的内存。
进一步的,当申请的内存大小与需要的内存大小不一致时,根据写入数据的长度,重新计算所述block可以存储的数据量。
进一步的,申请的内存放入链表中进行管理,写入数据时,每次从申请的内存中分配一定大小的buffer,并记录当前数据写入的偏移量,当前buffer存满后,将从申请的内存中分配一个新的buffer。
进一步的,buffer中只用来存储顺序数据,对于乱序数据,当需要向所述block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中;
当一个block写满或者需要使用新的时间段时,转为Immutable Block,此时所述block不能写入数据,放到刷盘队列中等待落盘;
当数据持久化完成后,block申请的内存可以回收,将所述block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取。
一种时序存储引擎内存设计及分配装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种时序存储引擎内存设计及分配方法。
本发明的一种时序存储引擎内存设计及分配方法及装置和现有技术相比,具有以下突出的有益效果:
本发明提升了时序数据库内存的利用率,方便数据的写入和查询,防止出现数据写入异常的场景出现,使得计算资源、存储资源可以根据业务场景进行有效的规划。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种时序存储引擎内存设计及分配方法中ObjectTable示意图;
附图2是一种时序存储引擎内存设计及分配方法中ValueLength的示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1所示,本实施例中的一种时序存储引擎内存设计及分配方法,其特征在于,时序数据库存储引擎对外提供的存储数据的最小单元是ObjectTable,一个所述ObejctTable在内存中有多个block用于存储一个时间段内的时序数据,当一个所述block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;
创建所述block时,需要根据计算得到的block大小申请对应的内存,每次所述block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。
对于写入的时序数据,使用存储内部的编解码策略,保持每条数据长度固定,每条数据的头部增加bitmap记录值为空的列;
如图2所示,一条数据由多个列或属性组成,在时序数据场景中,第一个属性为时间戳,第二个属性是一个bitmap,记录值为空的列,之后的属性都是value。
block的创建是在数据写入时,首先计算得到一条数据的长度ValueLength,根据所述ValueLength计算出所述block存储数据需要的大小,并在block创建时申请对应的内存空间,其中一条数据的计算方式为:
ValueLength=TimeStamp.Size()+BitMap.Size()+ColumnValue.Size()。
根据元数据中的时间跨度阈值及写入数据的时间间隔,估算得到block中需要存储的数据条数,根据需要存储的数据条数和数据大小,计算得到block需要分配的内存大小。
校验所述内存大小是否在设置的内存阈值之间,超出时,需要将申请的内存大小置为最大或者最小内存阈值,申请连续内存空间的内存。
当申请的内存大小与需要的内存大小不一致时,根据写入数据的长度,重新计算所述block可以存储的数据量。
申请的内存放入链表中进行管理,写入数据时,每次从申请的内存中分配一定大小的buffer,并记录当前数据写入的偏移量,当前buffer存满后,将从申请的内存中分配一个新的buffer。
buffer中只用来存储顺序数据,对于乱序数据,当需要向所述block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中;
当一个block写满或者需要使用新的时间段时,转为Immutable Block,此时所述block不能写入数据,放到刷盘队列中等待落盘;
当数据持久化完成后,block申请的内存可以回收,将所述block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取。
例如:
当向新的ObejctTable写入一条数据时,需要创建一个新的block用于存储数据,首先计算该数据的长度valueLength,即值前缀所占扩建与所有列值所占空间的和:
ValueLength=TimeStamp.Size()+BitMap.Size()+ColumnValue.Size()
然后根据设定的block的时间跨度阈值及数据采集的时间跨度,计算得到该block中需要存储的数据量ValueNum。则需要申请的内存大小为:
BlockSize=ValueLength*ValueNum
blockSize不能小于可以申请的最小内存阈值,默认为8KB,不能大于最大可以申请的最大内存阈值,默认为96MB,否则将blockSize设置为对应阈值的大小。然后申请blockSize大小的一段连续的内存空间,由于存在内存不足的情况,申请的内存大小allocateSize可能小于blockSize,当不一致时,需要根据实际分配的内存大小allocateSize重新计算当前block能够写入的数据量valueNum。
将分配好的内存大小划分为默认8KB大小的buffer,由链表进行管理,当block内存不足时,每次分配一个bufferr大小的内存块,并记录当前内存块的偏移量。
buffer只用来存储顺序数据(时间戳递增的数据),对于乱序数据,block中有专门的对象存储,当需要向block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中。
读取数据时,如果查询的是乱序数据,需要加锁,对乱序数据进行排序。
当该block已满或者存储的value的最大时间戳已超过时间跨度阈值,则将block状态置为不可写状态,等待刷盘,当落盘以后,将该block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取的。
基于上述方法,本实施例中的一种时序存储引擎内存设计及分配装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种时序存储引擎内存设计及分配方法。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种时序存储引擎内存设计及分配方法及装置权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (9)
1.一种时序存储引擎内存设计及分配方法,其特征在于,时序数据库存储引擎对外提供的存储数据的最小单元是ObjectTable,一个所述ObejctTable在内存中有多个block用于存储一个时间段内的时序数据,当一个所述block写满或者时间跨度超过设定阈值时,需要改变当前block的状态为不可写,然后创建新的block;
创建所述block时,需要根据计算得到的block大小申请对应的内存,每次所述block需要写入数据时,从申请的内存中申请固定大小的buffer,当所述block刷盘完成后申请的内存放到回收队列中等待回收。
2.根据权利要求1所述的一种时序存储引擎内存设计及分配方法,其特征在于,对于写入的时序数据,使用存储内部的编解码策略,保持每条数据长度固定,每条数据的头部增加bitmap记录值为空的列;
一条数据由多个列或属性组成,在时序数据场景中,第一个属性为时间戳,第二个属性是一个bitmap,记录值为空的列,之后的属性都是value。
3.根据权利要求1或2所述的一种时序存储引擎内存设计及分配方法,其特征在于,所述block的创建是在数据写入时,首先计算得到一条数据的长度ValueLength,根据所述ValueLength计算出所述block存储数据需要的大小,并在block创建时申请对应的内存空间,其中一条数据的计算方式为:
ValueLength=TimeStamp.Size()+BitMap.Size()+ColumnValue.Size()。
4.根据权利要求3所述的一种时序存储引擎内存设计及分配方法,其特征在于,根据元数据中的时间跨度阈值及写入数据的时间间隔,估算得到block中需要存储的数据条数,根据需要存储的数据条数和数据大小,计算得到block需要分配的内存大小。
5.根据权利要求4所述的一种时序存储引擎内存设计及分配方法,其特征在于,校验所述内存大小是否在设置的内存阈值之间,超出时,需要将申请的内存大小置为最大或者最小内存阈值,申请连续内存空间的内存。
6.根据权利要求5所述的一种时序存储引擎内存设计及分配方法,其特征在于,当申请的内存大小与需要的内存大小不一致时,根据写入数据的长度,重新计算所述block可以存储的数据量。
7.根据权利要求6所述的一种时序存储引擎内存设计及分配方法,其特征在于,申请的内存放入链表中进行管理,写入数据时,每次从申请的内存中分配一定大小的buffer,并记录当前数据写入的偏移量,当前buffer存满后,将从申请的内存中分配一个新的buffer。
8.根据权利要求7所述的一种时序存储引擎内存设计及分配方法,其特征在于,buffer中只用来存储顺序数据,对于乱序数据,当需要向所述block中插入乱序数据时,每次申请一个最小的page页,这个空间不算入block空间中;
当一个block写满或者需要使用新的时间段时,转为Immutable Block,此时所述block不能写入数据,放到刷盘队列中等待落盘;
当数据持久化完成后,block申请的内存可以回收,将所述block申请的内存放入回收队列中等待回收,在回收队列中的数据在block中依然可以读取。
9.一种时序存储引擎内存设计及分配装置,其特征在于,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210914023.8A CN115408149A (zh) | 2022-08-01 | 2022-08-01 | 一种时序存储引擎内存设计及分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210914023.8A CN115408149A (zh) | 2022-08-01 | 2022-08-01 | 一种时序存储引擎内存设计及分配方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115408149A true CN115408149A (zh) | 2022-11-29 |
Family
ID=84159243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210914023.8A Pending CN115408149A (zh) | 2022-08-01 | 2022-08-01 | 一种时序存储引擎内存设计及分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115408149A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483886A (zh) * | 2023-04-10 | 2023-07-25 | 上海沄熹科技有限公司 | 结合kv存储引擎和时序存储引擎查询olap的方法 |
CN117130547A (zh) * | 2023-08-01 | 2023-11-28 | 上海沄熹科技有限公司 | 一种存储引擎数据落盘平滑背压方法及装置 |
-
2022
- 2022-08-01 CN CN202210914023.8A patent/CN115408149A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483886A (zh) * | 2023-04-10 | 2023-07-25 | 上海沄熹科技有限公司 | 结合kv存储引擎和时序存储引擎查询olap的方法 |
CN116483886B (zh) * | 2023-04-10 | 2024-04-02 | 上海沄熹科技有限公司 | 结合kv存储引擎和时序存储引擎查询olap的方法 |
CN117130547A (zh) * | 2023-08-01 | 2023-11-28 | 上海沄熹科技有限公司 | 一种存储引擎数据落盘平滑背压方法及装置 |
CN117130547B (zh) * | 2023-08-01 | 2024-05-28 | 上海沄熹科技有限公司 | 一种存储引擎数据落盘平滑背压方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10303596B2 (en) | Read-write control method for memory, and corresponding memory and server | |
EP2735978B1 (en) | Storage system and management method used for metadata of cluster file system | |
CN115408149A (zh) | 一种时序存储引擎内存设计及分配方法及装置 | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN104503703B (zh) | 缓存的处理方法和装置 | |
CN103020255A (zh) | 分级存储方法和装置 | |
US10712943B2 (en) | Database memory monitoring and defragmentation of database indexes | |
CN106445409A (zh) | 一种分布式块存储的数据写入方法及装置 | |
US20200133810A1 (en) | Method for managing multiple disks, electronic device and computer program product | |
CN115221131A (zh) | 一种时序数据库高速数据读写方法及装置 | |
CN104050057B (zh) | 一种历史感知的数据去重碎片消除方法与系统 | |
CN115576505A (zh) | 一种数据存储方法、装置、设备及可读存储介质 | |
US8732404B2 (en) | Method and apparatus for managing buffer cache to perform page replacement by using reference time information regarding time at which page is referred to | |
CN111913913B (zh) | 访问请求的处理方法和装置 | |
CN109977074B (zh) | 一种基于hdfs的lob数据处理方法及装置 | |
US20200301594A1 (en) | Storing objects in data structures | |
CN111831206B (zh) | 存储空间切换方法及后端监控系统 | |
US10503651B2 (en) | Media cache band cleaning | |
US11853577B2 (en) | Tree structure node compaction prioritization | |
CN111949486B (zh) | 一种实时集群业务监控的实现方法、装置 | |
CN118093557B (zh) | 区块链节点状态数据处理方法、电子装置和存储介质 | |
KR101221992B1 (ko) | 데이터 로깅 장치 | |
US20240086362A1 (en) | Key-value store and file system | |
CN111158605B (zh) | 用于优化操作系统磁盘存储策略的方法、装置和智能设备 | |
CN112612415B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240731 Address after: Room 305-22, Building 2, No. 1158 Zhangdong Road and No. 1059 Dangui Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 200120 Applicant after: Shanghai Yunxi Technology Co.,Ltd. Country or region after: China Address before: 250100 Ji'nan hi tech Zone No. 2877, Shandong Province Applicant before: INSPUR SOFTWARE GROUP Co.,Ltd. Country or region before: China |