天天看點

WiredTiger的一些特性

WiredTiger資料存儲引擎是一個高性能,可擴充,支援事務,擁有産品級别,開源的NOSQL資料引擎。它的目的就是最大化你買的每一個電腦的價值。

1.WiredTiger提供低延遲和高吞吐量。(在cache中的讀操作不需要latch,而寫需要一個單獨的latch)(不懂)

2.WiredTiger處理比RAM大的資料集時,沒有性能和資源方面的惡化。

3.WiredTiger在處理大量通路和大資料集時的行為是可以預測的。

4.WiredTiger提供事務語義而不用blocking(這裡意思是使用NO-Blocking IO)。

5.WiredTiger存儲的資料不會被斷寫損壞,因為在系統故障後會恢複到一個檢查點(checkpoint)。

6.WiredTiger支援PB級别的表,4G大小的record,64-bits的record數量。

WiredTiger在設計時遵守以下幾個核心的原則:

一:多cpu核心擴充

WiredTiger的擴充技術是基于現代多CPU結構的架構。使用了多種程式設計技術例如:hazard pointers,lock-free算法,fast latching和message passing。它可以更好地利用每一個CPU核心。

WiredTiger的事務使用了一種優化的并發控制算法,這種算法有效地避免了集中式鎖管理的性能瓶頸。一個線程中的事務性操作不會阻塞另一個線程的事務性操作。它提供了健壯的隔離級别,并且可以檢測到update操作的沖突。

二:Hot caches

WiredTiger同時支援兩種資料存儲方式 row-oriented storage和column-oriented storage.這兩種存儲方式又為何物?row-oriented storage是把一行資料存儲在一起,而column-oriented storage是把每列資料存儲在不同的檔案中。

這樣做可以更高效地使用存儲空間。當你讀或寫以列存儲的資料時,隻有與查詢相關的列檔案會被放入記憶體。列存儲的核心問題是值存儲在表中的邏輯位置,而不是實體位置。最後補充一點,行和列的存儲方式可以在表的級别上混合和比對:例如一個以行方式存儲的索引可以被建立在一個以列存儲的表中。

    WiredTiger之是以寫的速度非常快,究其根本原因是使用了LSM算法。(LSM可以查詢相關資料,WiredTiger的LSM實作也可以查詢相關資料)

WiredTiger支援不同類型的Btree結點,進而增加了記憶體的使用效率。

WiredTiger支援字首壓縮算法和值字典。

WiredTiger支援使用huffman engine進行靜态編碼。

三:提高I/O的價值

WiredTiger使用緊湊的檔案格式,來減少硬碟消耗。WiredTiger不會在磁盤上存儲頁面内容的索引資訊,而是在頁被讀或被需要時執行個體化内容的索引資訊。這樣做簡化了檔案格式,就拿小型K/V檔案來說,它可以減少20%-50%的檔案寫入。

WiredTiger支援可變長度的頁,這意味着對于大對象來說,浪費的空間減小了。你不必為壓縮而煩惱,因為當K/V鍵值對插入和删除時,頁會自然的增長和收縮。

WiredTiger可對表頁上的塊進行壓縮。因為WiredTiger支援可變長度的頁,是以頁不必收縮*固定*的大小來進行塊壓縮。塊壓縮對于頁來說是可選的,使用者可以自行選擇适合自己的壓縮算法,塊壓縮可以減少30%-80%的資料。

WiredTiger的葉頁大小可以達到512M。是以當從磁盤讀取大量資料時,要在磁盤搜尋的情況下,顯著提高表掃描性能的可能性較小。