[發明專利]一種時序存儲引擎內存設計及分配方法及裝置在審
| 申請號: | 202210914023.8 | 申請日: | 2022-08-01 |
| 公開(公告)號: | CN115408149A | 公開(公告)日: | 2022-11-29 |
| 發明(設計)人: | 張華海;梁波;張煒剛 | 申請(專利權)人: | 浪潮軟件集團有限公司 |
| 主分類號: | G06F9/50 | 分類號: | G06F9/50;G06F3/06 |
| 代理公司: | 濟南信達專利事務所有限公司 37100 | 代理人: | 姜麗潔 |
| 地址: | 250100 山東*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 時序 存儲 引擎 內存 設計 分配 方法 裝置 | ||
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中任一所述的方法。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浪潮軟件集團有限公司,未經浪潮軟件集團有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210914023.8/1.html,轉載請聲明來源鉆瓜專利網。





