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。是以當從磁盤讀取大量資料時,要在磁盤搜尋的情況下,顯著提高表掃描性能的可能性較小。