您好,登錄后才能下訂單哦!
這篇文章主要介紹“C-Store的特點有哪些”,在日常操作中,相信很多人在C-Store的特點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C-Store的特點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
背景知識
行式存儲是當時數據庫的主流,由于適用 OLTP 場景,于是叫做 write-optimized,而針對 OLAP 場景的系統叫做 read-optimized,如數據倉庫。
CPU的增速比磁盤帶寬快很多,于是可以犧牲一定的 CPU 來換取磁盤帶寬。
有兩種方式干這個事:(1)編碼(2)densepack,緊湊存儲,我理解就是壓縮。
當時關系數據庫不能很好的支持 OLAP 查詢密集場景。于是作者提出了一個新的列存數據庫 C-Store,這篇文章里包含很多內容,是個大雜燴,其中有幾個新的特點:(1)write-optimized 和 read-optimized 混合架構 (2)存儲模型,冗余的數據按不同順序存儲,來支持快速檢索。(3)高效的壓縮,直接處理壓縮的數據(4)列式查詢優化器(5)數據恢復(6)快照隔離避免 2PC
本文介紹其中的(1)(2)(5)
(1)混合架構
優化寫入和優化查詢是比較互斥的,比如直接按寫入順序存儲數據,就像日志追加一樣,但是這種方式對查詢不友好,因為查詢可能在另一種順序下比較快。
一個模型適用兩個場景是很難的,因此本文的架構是搞兩個模塊。一個模塊負責處理快速寫入,就是上邊的 WS,一個模塊負責提供高效的查詢,就是下邊的 RS,這樣就需要一些連接器,就是 Tuple Mover,將 WS 中的數據同步到 RS 中。
作者的預期是 WS 相比 RS 而言是很小的一部分,可以全部放在內存中,其實這個架構就類似 LSM 了。
為了實現簡便,C-Store 用同一套列存引擎來管理 WS 和 RS,只不過在 WS 中多存一些索引信息用來快速定位數據。
(2)存儲模型
projection:
每一個表可以綁定多個 projection,這是什么概念呢?每個 projection 是這張表的某些列的組合,是實際存儲在磁盤上的,每個 projection 可以按不同順序存儲,一張表的每個列必須出現在至少一個 projection 中。一個表綁定的 projection 也可能包括其他表中的列(相當于重新劃分表了)。
比如一張用戶表(姓名,年齡,工資),可以綁定兩個 projection,P1(姓名,年齡) order by 年齡,P2(姓名,工資),order by工資。
這樣,按年齡查找姓名和按工資查找姓名這兩種查詢就可以分別分配到 P1 和 P2 里,每個都很快。
由于把各個列分散開了,就需要重組一行數據。這里涉及三個概念
SID:Segment id,每個 projection 水平分成多個 segment 分區,SID 就是分區號。
SK:Storage keys,每個分區中,給每行數據分配的一個自增的主鍵,用來將不同的 projection 對齊,其實就是行號、下標。
下圖就是一個示例:
join index:為了重建一行完整的數據,需要將這些按不同順序的記錄映射到同一個順序上,也就是 join index 的作用。比如將 projection2 映射到 projection1 上,這是個一對一映射。
這個 join index 可以是一條路徑,比如還有一個 projection3 到 projection2 的映射,有傳遞性。這樣,就能根據 join index 重組數據了。
在對數據的遍歷過程中,將傳統的按點返回的 Iterator 接口改成了批量返回的 iterator ,每個批次 64KB,避免了方法的過多調用。
數據恢復
當節點掛掉但是數據沒丟時,可以直接重啟機器,把其他機器的執行隊列中的操作拿過來執行。
當一個節點的 RS 和 WS 都丟了,就需要從其他節點的 projections 和 join indexes 重建這個節點的數據。
當僅僅 WS 丟了,可以快速從 RS 恢復出來,這個涉及快照隔離,不詳細說了。
局限
projection 是如何生成的沒有具體說明,沒有講如何做負載均衡。
join index 的維護比較麻煩,尤其是加入update,在恢復數據時候也需要 join index,沒有做錯誤恢復的性能。
在完成這篇論時系統還沒開發完,功能不全,還是個單機系統。
到此,關于“C-Store的特點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。