KV數據存儲:內存篇


緣起

數據存儲實在太重要,打算整理下有關數據存儲的相關內容。

內存篇

定長數據存儲

1、定長無序;

2、定長有序:1)數據本身有序;2)索引+無序數據。常見數據結構:數組、鏈表、樹、B+樹等。

增強約束:內存有序存放(新數據追加寫/循環寫;老數據直接覆蓋)。有序存放數據的內存數據可直接寫出到持久化設備,如磁盤、SSD等。

不定長數據

1、有序索引+內存無序存放(new、malloc);

2、有序索引+內存有序存放(預分配空間)。

3、有序索引+內存有序存放+緊湊追加寫(更新索引:更新或增加;廢棄標識:刪除)

常見的空間預分配策略:

1、數組、多階定長空間(指數、非指數);

2、定長數組+鏈表;

3、多階hash(同hash下是否允許存放多個key的數據?影響數據查找結束判斷)

空間擴展和數據遷移

對於多階定長空間分配,數據可不斷向高一階的空間遷移。當記錄不斷增加,需要限制對高階空間的長度。不斷擴展高階空間塊,可解決數據存儲問題,若考慮內存的使用率,還應該考慮如何決定最高階空間長度、是否增加多個低階空間塊。

緊湊存儲

對每一條內存中的數據記錄,要實現緊湊存儲的關鍵:可識別的數據記錄邊界。常見方法:1)記錄長度;2)使用唯一的記錄終止符(比如文本文件的'\n')。

使用場景的特殊限制:數據量基本不變;只讀;可丟數據;定期更新等。以上限制可簡化存儲設計。

問題:

實現細節:

1)如何保證記錄的原子更新?

2)如何保證更新期間的數據有效性?讀寫高效性?如何實現多讀多寫?一寫多讀?

系統通用性:

1) 如何保證數據安全 -- 持久化; 額外問題:故障恢復

2) 如何保證系統的平行擴展 -- 多機存儲 -> 引發問題:數據如何分布

3) 如何保證數據可用性 -- 存儲多份數據 -> 引發問題:數據的一致性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM