[發明專利]一種跨平臺高效鍵值存儲方法在審
| 申請號: | 202010407639.7 | 申請日: | 2020-05-14 |
| 公開(公告)號: | CN111639076A | 公開(公告)日: | 2020-09-08 |
| 發明(設計)人: | 張向勝;陸黎川;張力;徐瑞超;張冠軍;范沖沖 | 申請(專利權)人: | 民生科技有限責任公司 |
| 主分類號: | G06F16/22 | 分類號: | G06F16/22;G06F16/24;G06F9/52 |
| 代理公司: | 北京金智普華知識產權代理有限公司 11401 | 代理人: | 巴曉艷 |
| 地址: | 101300 北*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 平臺 高效 鍵值 存儲 方法 | ||
本發明提供了一種跨平臺高效鍵值存儲方法,涉及鍵值存儲技術領域,能夠既保證數據準確性,又對內存、空間占用以及讀取效率方面進行優化,具有更好的性能;該方法所述方法采用緊湊型數據結構對數據進行存儲,以避免數據冗余;存儲數據時直接以二進制形式寫入數據庫文件中,以減少文件占用空間;內存對數據進行讀取時采用鍵值哈希索引+偏移量的方式進行緩存,實現對內存的節省;采用文件鎖的方式解決多進程數據并發安全問題。本發明提供的技術方案適用于鍵值存儲和增刪改查的過程中。
【技術領域】
本發明涉及鍵值存儲技術領域,尤其涉及一種跨平臺高效鍵值存儲方法。
【背景技術】
在程序的開發過程中,無論什么平臺,比較常見的一種需求就是持久化的存儲鍵值對。以Android端為例,持久化存儲時存在幾個問題:
1.初始化消耗問題:SharedPreferences在初始化時會將文件中的所有數據都遍歷一遍,并加載到hashmap中,當數據量較大時,這對性能的消耗和內存的占用都是非常巨大的;
2.增刪改查效率問題:以Android端為例,可以使用SharedPreferences來進行鍵值對的存儲;但SharedPreferences是以標準的XML格式來存儲key-value的,為了文件的可讀性,增加了一些冗余的字符。因此,其增刪改查的效率相對較低;
3.并發操作數據一致性問題:在SharedPreferences非單例的情況下,其存儲數據的時候并不是線程安全的,需要在調用函數時進行一些線程安全的操作,較為繁瑣;
4.進程間同步問題(Android獨有):當Android應用內開啟了多個進程時,存儲key-value的數據同步問題更為突出,原生并沒有提供任何類似問題的完整解決方案。
因此,有必要研究一種跨平臺高效鍵值存儲方法來應對現有技術的不足,以解決或減輕上述一個或多個問題。
【發明內容】
有鑒于此,本發明提供了一種跨平臺高效鍵值存儲方法,既保證了數據準確性,又在空間和時間方面進行了優化,具有更好的性能。
一方面,本發明提供一種跨平臺高效鍵值存儲方法,其特征在于,所述方法采用緊湊型數據結構對數據進行存儲,以避免數據冗余;存儲數據時直接以二進制形式寫入數據庫文件中,以減少文件占用空間;內存對數據進行讀取時采用鍵值哈希索引+偏移量的方式進行緩存,實現對內存的節省。
如上所述的方面和任一可能的實現方式,進一步提供一種實現方式,緊湊型數據結構的格式具體為:
|value|key|valueLen|keyLen|keyHash|valueHash|valueType|,
其中,valueType代表數據類型和是否為有效數據,占用8bit,keyHash表示鍵值哈希值,占用32bit,也用作該數據在索引中的哈希值,valueHash表示value的哈希值,占用8bit,用于保證數據的完整性,keyLen表示鍵值長度,占用10bit,valueLen表示值的長度,另外keyLen和valueLen表示偏移量;
每條數據之間頭尾相連,沒有分隔符。
如上所述的方面和任一可能的實現方式,進一步提供一種實現方式,keyLen代表的長度范圍為0-1023。
如上所述的方面和任一可能的實現方式,進一步提供一種實現方式,對數據庫文件中的數據進行插入和更新操作時,在索引列表中遍歷待操作數據的鍵值哈希值;
如果存在相同的鍵值哈希值,則判定為更新邏輯,將原有數據的數據類型標記為已刪除,并在數據庫文件的末尾增加新的數據,生成新的內存索引;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于民生科技有限責任公司,未經民生科技有限責任公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010407639.7/2.html,轉載請聲明來源鉆瓜專利網。





