介紹一下TiDB、RocksDb、levelDB、LSM 樹、SSTable。

LSM 樹(Log-Structured Merge-Tree)

  • 核心原理:通過將隨機寫轉換為順序寫優化寫入性能,適用于寫密集型場景。數據首先寫入內存中的 MemTable(有序結構,如跳表),當達到閾值后轉為 Immutable MemTable,再刷入磁盤形成 SSTable。通過分層合并(Compaction)清理冗余數據。
  • 關鍵特點
    • 寫放大:合并操作可能導致重復寫入,但順序寫優勢顯著(如機械盤順序寫性能是隨機寫的千倍)。
    • 讀放大:需從內存到多層級磁盤文件逐層查找,但通過布隆過濾器和索引優化。
    • 分層結構:數據從高層(熱數據)到低層(冷數據)逐步下沉,低層容量按指數級增長(如每層容量是上一層的10倍)。

SSTable(Sorted String Table)

  • 定義:磁盤上的有序鍵值文件,不可變且全局有序(除Level 0外),每個文件包含數據塊、索引塊和布隆過濾器。
  • 優化手段
    • 索引加速:通過稀疏索引快速定位數據塊。
    • 布隆過濾器:減少無效磁盤I/O,判斷鍵是否存在于文件中。
    • 壓縮:使用Snappy/ZSTD等算法減少存儲空間和傳輸帶寬。

LevelDB

  • 定位:Google開源的輕量級單機KV存儲引擎,基于LSM樹。
  • 核心設計
    • 內存結構:Active MemTable(寫入口)和Immutable MemTable(待刷盤)。
    • Compaction策略:分層合并,Level 0允許文件間Key重疊,其他層級全局有序。
    • 限制:單線程Compaction、無多版本控制,適合嵌入式或小規模場景。
  • 典型應用:Chrome瀏覽器本地存儲、輕量級NoSQL場景。

RocksDB

  • 定位:Facebook優化的LevelDB升級版,支持企業級高并發和大數據量。
  • 關鍵優化
    • 并行Compaction:多線程加速合并,降低寫停頓。
    • 冷熱分離:熱數據優先保留在低層,冷數據下沉至高層。
    • 靈活配置:支持多種壓縮算法、速率限制、TTL等。
    • 增量備份:支持Checkpoint和增量快照。
  • 應用場景:MySQL底層存儲(如TiDB)、分布式系統(如CockroachDB)、消息隊列(如Kafka的RocksDB狀態存儲)。

TiDB

  • 定位:國產分布式HTAP數據庫,兼容MySQL協議,底層存儲基于RocksDB。
  • 架構組件
    • TiKV:分布式KV存儲引擎,數據按Region分片,基于Raft協議保證一致性。
    • PD(Placement Driver):全局調度器,管理元數據、負載均衡和故障恢復。
    • TiSpark:集成Spark處理復雜OLAP查詢。
  • 核心優勢
    • 水平擴展:通過添加節點實現計算和存儲分離擴容。
    • HTAP能力:行存(TiKV)支持OLTP,列存(TiFlash)支持OLAP。
    • 金融級可靠性:支持分布式事務(Percolator協議)和多副本強一致。

對比與關聯

維度LevelDBRocksDBTiDB
架構單機嵌入式單機/分布式擴展分布式HTAP
Compaction單線程,分層合并多線程,冷熱分離基于RocksDB,Region分片
適用場景小規模、低并發高吞吐、企業級存儲大規模OLTP+OLAP混合負載
核心優化基礎LSM實現多級緩存、速率控制全局調度、行列混存

典型應用場景

  1. LSM樹:寫密集型場景(日志存儲、時序數據)。
  2. LevelDB:瀏覽器本地存儲、小型嵌入式系統。
  3. RocksDB:分布式數據庫底層引擎(如TiKV)、消息隊列狀態存儲。
  4. TiDB:金融級分布式事務(如支付系統)、實時分析(如電商大促監控)。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898486.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898486.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898486.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP32 BLE 初步學習筆記

前言 藍牙作為一個龐大的知識體系,其學習和運用對于初學者來說顯得有些復雜且凌亂。我整理了這段時間的學習筆記,涵蓋了協議棧、工作流程、參數等內容。在實際應用中,我們主要使用 GAP 和 GATT,協議棧中的其他部分只需了解即可。…

dfs(二十四)47. 全排列 II

47. 全排列 II 給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。 示例 1: 輸入:nums [1,1,2] 輸出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 輸入:nums [1,2,3] 輸出:[[1,…

代碼隨想錄算法訓練營第五十二天 |101. 孤島的總面積102. 沉沒孤島103. 水流問題104.建造最大島嶼

101. 孤島的總面積 卡碼網:101. 孤島的總面積(opens new window) 題目描述 給定一個由 1(陸地)和 0(水)組成的矩陣,島嶼指的是由水平或垂直方向上相鄰的陸地單元格組成的區域,且完全被水域單…

Simple-BEV的bilinear_sample 作為view_transformer的解析,核心是3D-2D關聯點生成

文件路徑models/view_transformers 父類 是class BiLinearSample(nn.Module)基于https://github.com/aharley/simple_bev。 函數解析 函數bev_coord_to_feature_coord的功能 將鳥瞰圖3D坐標通過多相機(針孔/魚眼)內外參投影到圖像特征平面&#xff0…

A/B測試入門指南

目錄 一、什么是A/B測試1.1 A/A測試1.2 多變量測試 二、A/B測試應用場景三、A/B測試基本流程四、A/B測試面試真題4.1 【是什么】4.2 【為什么】4.3 【怎么做】 五、應用實戰 一、什么是A/B測試 A/B 測試是一種常見的實驗方法,用于比較兩個或多個方案的效果&#xff…

自己構建的交叉編譯器找不到PATH_MAX

接上篇centos6.10 編譯gcc11.5 x64到aarch64交叉工具鏈 -CSDN博客 PATH_MAX找不到,不僅在編譯gcc的過程中遇到,而且臨時改gcc源碼添加#define PATH_MAX 4096 宏定義后勉強通過gcc全量編譯。這個新的gcc編譯使用了PATH_MAX宏的代碼還是會找不到。這個問題…

vscode查看文件歷史git commit記錄

方案一:GitLens 在vscode擴展商店下載GitLens 選中要查看的文件,vscode界面右上角點擊GitLens的圖標,選擇Toggle File Blame 界面顯示當前打開文件的所有修改歷史記錄 鼠標放到某條記錄上,可以看到記錄詳情,選中O…

ngx_http_conf_ctx_t

定義在 src/http/ngx_http_config.h typedef struct {void **main_conf;void **srv_conf;void **loc_conf; } ngx_http_conf_ctx_t; ngx_http_conf_ctx_t 是 Nginx 中用于管理 HTTP 配置上下文的核心結構體,其設計體現了 Nginx 多級配置&…

IREE AI編譯器編譯測試流程指南

iree onnx demo 計劃協議系列博客,記錄學習iree編譯器的過程. 今天第一篇博客,記錄安裝和測試iree 文章目錄 iree onnx demo下載安裝ireepython環境安裝編譯測試1. [前端] onnx模型轉MLIR文件2. [后端] MLIR文件轉可執行文件3. [執行] 執行測試編譯后的文件 關于后端設備的介…

【產品小白】如何運營一個新的產品

運營一個新產品既充滿機遇,也伴隨著挑戰。新產品運營的核心在于快速獲取用戶、驗證市場假設、持續迭代與優化,并通過有效的推廣和用戶反饋機制不斷完善產品。 1. 市場調研與定位 用戶調研:在產品初期,通過訪談、問卷、競品分析等…

破解驗證碼新利器:基于百度OCR與captcha-killer-modified插件的免費調用教程

破解驗證碼新利器:基于百度OCR與captcha-killer-modified插件的免費調用教程 引言 免責聲明: 本文提供的信息僅供參考,不承擔因操作產生的任何損失。讀者需自行判斷內容適用性,并遵守法律法規。作者不鼓勵非法行為,保…

JSON 解析中需要清理的危險字符

在代碼中 replace(chr(0), "") 的作用是刪除 JSON 響應中可能存在的空字符(Null character)。以下是詳細解釋: 1. chr(0) 是什么? chr(0) 表示 ASCII 碼為 0 的字符,即空字符(Null Character&am…

指令系統2(Load/Store 指令)

一. Load/Store 指令 1. 前變址 前變址指令是在讀取或存儲數據時,先根據基址寄存器(Rn)與偏移量(offset)計算出有效地址,再進行數據操作。相關指令及示例如下: LDR R0, [R1, #4]:從…

ubuntu部署運行xinference全精度對話deepseek本地部署圖文教程

前置環境搭建勞請移步往期 source activate 自己環境名啟動python3.12環境安裝xinference, 按教程敲命令,wheel包與wsl的通用,pip install 包名。 vllm引擎,transform引擎也會順帶自動裝上了。 后續操作請參照往期教程。本地部署模…

技術分享 | MySQL內存使用率高問題排查

本文為墨天輪數據庫管理服務團隊第51期技術分享,內容原創,如需轉載請聯系小墨(VX:modb666)并注明來源。 一、問題現象 問題實例mysql進程實際內存使用率過高 二、問題排查 2.1 參數檢查 mysql版本 :8.0.…

[AI速讀]混合語言IP集成:挑戰與高效解決方案

在現代SoC(系統級芯片)設計中,IP(知識產權模塊)復用是提升開發效率的關鍵。然而,當設計涉及多種硬件描述語言(如SystemVerilog、VHDL、SystemC)時,如何高效集成不同語言的IP模塊成為一大難題。本文將從實際設計場景出發,探討混合語言IP集成的核心挑戰,并介紹一套方法…

【vulhub/wordpress靶場】------獲取webshell

1.進入靶場環境: 輸入:cd / vulhub / wordpress / pwnscriptum 修改版本號: vim docker-compose.yml version: 3 保存退出 開啟靶場環境: docker - compose up - d 開啟成功,docker ps查看端口 靶場環境80…

微信小程序:用戶拒絕小程序獲取當前位置后的處理辦法

【1】問題描述: 小程序在調用 wx.getLocation() 獲取用地理位置時,如果用戶選擇拒絕授權,代碼會直接拋出錯誤。如果再次調用 wx.getLocation() 時,就不會在彈窗詢問用戶是否允許授權。導致用戶想要重新允許獲取地理位置時&#x…

NLP 與常見的nlp應用

自然語言處理(NLP)是一個廣泛的領域,它不僅包括自然語言理解(NLU),還涉及一系列其他任務和子領域。以下是NLP領域中的主要組成部分及其相關任務: 1. 自然語言理解(NLU) …

全網首創/純Qt/C++實現國標GB28181服務/實時視頻/云臺控制/預置位/錄像回放和下載/事件訂閱/語音對講

一、前言說明 用純Qt來實現這個GB28181的想法很久了,具體可以追溯到2014年,一晃十年都過去了,總算是整體的框架和邏輯都打通了,總歸還是雜七雜八的事情多,無法靜下心來研究具體的協議,最開始初步了解協議后…