成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LSM Tree 深度解析

數據庫
本文我們將看到LSM Tree如何使它們能夠實現宣稱的寫入速度,并以及如何促進讀取。

我們將深入探討日志結構合并樹,也稱為LSM Tree:這是許多高度可擴展的NoSQL分布式鍵值型數據庫的基礎數據結構,例如Amazon的DynamoDB、Cassandra和ScyllaDB。這些數據庫的設計被認為支持比傳統關系數據庫更高的寫入速率。我們將看到LSM Tree如何使它們能夠實現宣稱的寫入速度,并以及如何促進讀取。

在開始之前

首先,我們需要一些背景信息。典型的數據庫管理系統(DBMS)由多個組件組成,每個組件負責處理數據存儲、檢索和管理的不同方面。

其中一個組件是存儲引擎,它負責提供可靠的接口,以從/向底層存儲設備高效讀寫數據。

存儲引擎的性能在選擇數據庫時非常重要,因為它是最接近正在使用的存儲設備的組件。

用于實現存儲引擎的兩種流行數據結構是B+樹和LSM樹。在本文中,我們將覆蓋LSM樹。

LSM Tree 深度解析

LSM Tree并不是一個完整的單一數據結構,而是結合了多個數據結構,利用存儲層次結構中不同存儲設備的響應時間。

由于是追加寫入,它提供了高寫入速率,同時通過在RAM中維護的索引仍然提供低成本的讀取。

與基于B+樹的存儲引擎相比,它執行原地更新,但在LSM Tree中沒有原地更新,這有助于避免隨機I/O。在我們深入研究之前,讓我們詳細討論在寫入密集工作負載中使用基于B+樹的數據庫存儲引擎的缺點。

大多數傳統的關系型/SQL數據庫使用基于B+樹的存儲引擎。在這些數據庫中,每次寫入都必須執行不僅是記錄的請求寫入,還必須執行對B+樹不變式的任何所需的元數據更新,這涉及在B+樹結構中移動/拆分/合并節點。

解剖LSM Tree

LSM Trees凸顯了磁盤上的隨機I/O存在大量寫入開銷的問題,而順序寫入則更快,因為磁盤寫入頭緊挨著上一個記錄的位置,且旋轉和尋道延遲最小。

“Log-structured”這個術語意味著數據結構像追加日志一樣被組織。

“merge”這個術語指的是用于管理結構中數據的算法。其名稱中的“tree”一詞來自于數據被組織成多個級別,類似于典型計算機中存儲層次結構中的設備,其中頂層設備包含較小的數據子集,訪問速度更快,而較低級別包含較大的數據段,訪問速度較慢。

在最基本的設置中,LSM Tree由兩個數據結構組成,充分利用RAM和持久磁盤的優勢:LSM樹被優化用于快速寫入。

1. Memtable

LSM樹的工作方式不同。寫入在內存中按到達的順序進行批處理,存儲在稱為Mem table的結構中。Mem table按對象-鍵對進行排序,通常實現為平衡二叉樹。

當Mem table達到一定大小時,它將被刷新到磁盤作為不可變的有序字符串表。一個SS table以有序序列存儲鍵值對。這些寫入都是順序I/O,在任何存儲介質上都很快。

2.SS Tables

新的SS表成為LSM樹的最新段。隨著更多數據的到來,越來越多的這些不可變SS表被創建并添加到LSM樹中,每個都代表傳入更改的小時間段。

由于SS表是不可變的,對現有對象鍵的更新不會覆蓋舊的SS表。相反,將在最新的SS表中添加新條目,這將取代舊的SS表中對象鍵的任何條目。

LSM Tree上的操作

1.刪除

刪除對象需要特殊處理,因為我們無法標記SS表中的任何內容為已刪除。

為執行刪除操作,它會在對象鍵的最新SS表上添加一個稱為墓碑的標記。當我們在讀取時遇到墓碑時,我們知道該對象已被刪除。是的,刪除會占用額外的空間。

2. 讀取

為了響應讀取請求,我們首先嘗試在Mem table中查找鍵,然后在LSM樹中的最新訪問表中查找,然后在下一個SS表中查找,依此類推。由于SS表是有序的,查找可以有效進行。

SS表的積累產生了兩個問題。隨著SS表數量的增加,查找鍵將需要越來越長的時間。隨著SS表的累積,隨著鍵的更新和墓碑的添加,舊條目變得越來越多。這些會占用寶貴的磁盤空間。

為了解決這些問題,后臺運行定期的合并和壓縮過程,以合并SS表并丟棄過時或已刪除的值。這可以回收磁盤空間并限制讀取時必須查找的SS表數量。由于SS表是有序的,因此這個合并和壓縮過程是簡單而高效的。該方法類似于歸并排序算法的合并階段。

3. 寫入

LSM樹會在內存中緩沖傳入的寫入。當緩沖區填滿時,我們對其進行排序并將其刷新到磁盤作為不可變的SS表。

隨著更多的緩沖區刷新到磁盤,這會為讀取創建問題,因為每個讀取都必須搜索這些SS表以執行查找。

為了限制每個讀取時必須搜索的SS表數量,LSM樹會在后臺合并SS表并進行壓縮。

4. 壓縮策略

讓我們更仔細地看看壓縮過程。當合并SS表時,它們會被組織成級別。這是LSM樹名稱中“樹”的部分發揮作用的地方。

有不同的策略來確定何時以及如何合并和壓縮SS表。有兩種廣泛的策略:大小分層壓縮和級別壓縮。大小分層壓縮針對寫入吞吐量進行了優化,而級別壓縮則更多地針對讀取進行了優化。

壓縮可以使SS表數量保持在可管理的水平。SS表被組織成級別,每個級別的SS表隨著來自上一級別的SS表的出現而呈指數增長。

壓縮會消耗大量I/O。錯誤調整的壓縮可能會使系統餓死,并減慢讀取和寫入速度。

LSM Tree 的增強

最后,讓我們了解一些生產系統中LSM樹的標準優化。

為了查找鍵,它會在每個級別的SS表上執行搜索。盡管在排序數據上搜索很快,但在所有這些SS表上進行搜索會消耗大量I/O。

許多系統在內存中保留一個摘要表,其中包含每個級別的每個磁盤塊的最小/最大范圍。這允許系統跳過那些鍵不在范圍內的磁盤塊上的搜索,從而節省大量隨機I/O。

另一個可能昂貴的問題是查找不存在的鍵。這將需要查找所有級別的所有合格塊。大多數系統在每個級別上保留了一個Bloom過濾器。

Bloom過濾器是一種空間高效的數據結構,如果鍵不存在,則返回確定的“不存在”,如果鍵可能存在,則返回“可能存在”。這允許系統跳過一個級別,如果鍵在那里不存在,從而大大減少了需要的隨機I/O數量。

LSM Tree 的缺點

  • LSM樹的主要缺點是壓縮的成本,它影響讀取和寫入性能。由于涉及數據的壓縮/解壓縮、復制和比較,壓縮是LSM樹中資源占用最高的階段。
  • 所選的壓縮策略必須試圖最小化讀取放大、寫入放大和空間放大。
  • LSM樹的另一個缺點是執行讀取在最壞情況下會變慢。由于是追加方式,讀取必須在最低級別的SSTable中進行搜索。這涉及到尋找的文件I/O,這會導致讀取變慢。
責任編輯:趙寧寧 來源: 小技術君
相關推薦

2019-11-26 15:12:08

數據存儲B+樹

2022-10-29 08:44:39

分布式數據庫存儲

2024-01-11 12:14:31

Async線程池任務

2013-12-09 10:34:12

2023-03-06 11:13:20

Spring注解加載

2023-03-13 08:12:25

@DependsOn源碼場景

2023-03-27 08:12:40

源碼場景案例

2025-03-04 00:20:45

2019-03-06 09:55:54

Python 開發編程語言

2011-06-02 11:13:10

Android Activity

2011-08-02 18:07:03

iPhone 內省 Cocoa

2012-08-03 08:57:37

C++

2023-10-12 13:01:29

Redis數據庫

2013-07-02 10:08:46

爛代碼代碼優化代碼清理

2021-10-12 11:07:33

動畫深度Android

2009-12-14 17:14:08

Ruby文件操作

2011-06-27 09:15:21

QT Creator

2011-07-29 15:09:48

iPhone Category

2011-07-01 14:39:08

Qt Quick

2024-11-12 08:00:00

LSM樹GolangMemTable
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久免费 | 久久草视频 | 人人干人人干人人 | 中文字幕高清视频 | 欧美中文字幕一区二区三区 | 免费国产成人av | 亚洲视频中文字幕 | 一区二区三区在线免费 | 国产欧美一区二区三区在线看 | 久久久久国产一区二区三区四区 | 中文字幕91 | av香港经典三级级 在线 | 中文字幕精品一区久久久久 | 中文字幕av一区二区三区 | 成人免费一区二区三区牛牛 | 成人免费福利视频 | 国产japanhdxxxx麻豆 | 波多野结衣中文字幕一区二区三区 | 精品欧美一区二区三区免费观看 | 黄色毛片一级 | 免费在线一区二区 | 日韩高清一区 | 亚洲精品一区二区三区四区高清 | 久久天堂网| 99re99| 成人免费在线视频 | 羞羞视频在线观免费观看 | 一区二区三区在线观看视频 | 午夜视频免费在线观看 | 欧美黑人国产人伦爽爽爽 | 99精品国产一区二区三区 | 亚洲综合日韩精品欧美综合区 | 久久久久久九九九九 | 久久天天躁狠狠躁夜夜躁2014 | 看羞羞视频 | 久久综合久色欧美综合狠狠 | 国产免费福利小视频 | 亚洲欧美一区二区三区1000 | 福利精品在线观看 | 欧美一级片在线观看 | 欧美精品一区二区在线观看 |