[發明專利]一種內存映射實現隊列及其數據讀取和寫入方法在審
| 申請號: | 201911245653.5 | 申請日: | 2019-12-07 |
| 公開(公告)號: | CN111143236A | 公開(公告)日: | 2020-05-12 |
| 發明(設計)人: | 王春寶;范淵;黃進 | 申請(專利權)人: | 杭州安恒信息技術股份有限公司 |
| 主分類號: | G06F12/02 | 分類號: | G06F12/02;G06F12/06;G06F12/10 |
| 代理公司: | 杭州賽科專利代理事務所(普通合伙) 33230 | 代理人: | 郭薇;馮年群 |
| 地址: | 310051 浙江省*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 內存 映射 實現 隊列 及其 數據 讀取 寫入 方法 | ||
本發明涉及一種內存映射實現隊列及其數據讀取和寫入方法,通過利用文件內存映射的方式,將文件作為隊列的數據存儲,用同樣的方式產生隊列索引及隊列元素數據進行存儲;基于本地文件且通過內存映射方式的訪問文件,可以達到快速定位文件位置、讀取相關位置的內容、省去網絡通信步驟的目的,提高高吞吐的保障,內存映射利用系統完成落盤,即使應用崩潰也不會影響數據落盤,提高容錯性。本發明可以有效解決單體應用中隊列的需求,讓單體應用不通過引入第三方服務,以及不通過網絡通信的情況下,具備流量削峰的數據暫存、轉存的能力。
技術領域
本發明涉及電數字數據處理的技術領域,特別涉及一種內存映射實現隊列及其數據讀取和寫入方法。
背景技術
隨著開發框架和技術的流行,在應用開發過程中,對于隊列的使用,開發人員有越來越多的選擇,包括如ActiveMQ的傳統JMS實現,如kafka之類的分布式領域的佼佼者等,現有的隊列框架技術幾乎覆蓋了絕大多數應用場景。
然而在部分時候,開發人員其實只需要一個本地存儲隊列來完成臨時轉存數據的需要,無需分布式部署、無需分區容錯、更不需要網絡通信。比如,一個應用于外部數據的處理,可能由于外部數據流入系統時的流量不均勻而導致在流量大的時候系統內部無法及時處理的、具有暫存功能的且具有持久化特性的臨時隊列。
發明內容
為了解決現有技術中存在的問題,本發明提供一種優化的內存映射實現隊列及其數據讀取和寫入方法。
本發明所采用的技術方案是,一種內存映射實現隊列,所述隊列包括:
一元數據文件,用于記錄隊列頭部和尾部數據;
若干索引文件,用于以若干索引數據對應若干隊列數據;
若干隊列數據文件,用于存儲隊列元素數據。
優選地,所述隊列頭部和尾部數據為頭指針和尾指針;頭指針指向隊列下一個入隊元素的索引文件的編號,尾指針指向隊列下一個讀取元素的索引文件的編號。
優選地,任一所述索引數據對應的隊列數據包括隊列元素數據的數據文件編號、元素數據的偏移量、元素數據的長度及入隊時間戳信息。
優選地,任一所述索引數據的長度固定。
一種所述的內存映射實現隊列的數據讀取方法,所述方法包括以下步驟:
步驟1.1:讀取元數據文件中的尾指針,獲得索引文件;
步驟1.2:解析索引文件,得到索引數據對應的隊列數據;
步驟1.3:基于解析得到的隊列數據,從指定位置讀取指定長度的數據作為讀取數據;
步驟1.4:更新元數據文件的尾指針。
優選地,所述步驟1.2中,索引數據對應的隊列數據包括數據文件編號、數據偏移量及數據長度。
優選地,所述讀取數據被讀取后,觸發回收流程;所述回收流程為所有隊列元素數據都被讀取后刪除對應的隊列數據文件。
一種所述的內存映射實現隊列的數據寫入方法,所述方法包括以下步驟:
步驟2.1:讀取元數據文件中的頭指針,獲得索引文件;
步驟2.2:解析索引文件,得到索引數據對應的待入隊數據文件;
步驟2.3:計算隊列的剩余容量,若剩余容量滿足待入隊數據文件的寫入,則直接將待入隊數據文件加入隊列,否則,進行下一步;
步驟2.4:為當前待入隊數據文件創建新的索引數據,寫入隊列數據,索引數據記錄對應的隊列數據并被追加至索引文件;
步驟2.5:更新元數據文件中的頭指針。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州安恒信息技術股份有限公司,未經杭州安恒信息技術股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911245653.5/2.html,轉載請聲明來源鉆瓜專利網。





