日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager

發布時間:2025/3/20 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文翻譯自 RocksDB 官方 Wiki《Write Buffer Manager》:

https://github.com/facebook/rocksdb/wiki/Write-Buffer-Manager

翻譯者:fanrui

Write buffer manager 幫助用戶控制多個 column family 和 DB 實例的 MemTable 內存消耗。通過 Write Buffer Manager,用戶可以實現:

  • 嘗試將多個 Column Family 和 DB 的 MemTable 總內存限制在一個閾值以下。
  • 允許 MemTable 使用 Block Cache 的內存
  • Write buffer manager 的使用與 rate_limiter 和 sst_file_manager 類似。用戶可以創建一個 write buffer manager 對象,并將其傳遞給你希望由該對象控制 MemTable 大小的 Column Family 或 DB 選項。看?write_buffer_manager.h?的代碼注釋可以看到如何使用。

    限制 MemTable 的總內存

    創建 write buffer manager 對象時可以給出內存限制。RocksDB 將會盡量控制總的使用內存在限制以下。

    在 5.6 及其之后的版本,如果可變的 MemTable 的總大小超過了內存限制的 90%,那么 RocksDB 的相應 Column Family 就會觸發 flush。如果實際的內存使用超過了限制,即使可變的 MemTable 使用的內存低于 90%,也會非常積極地觸發 flush。在 5.6 版本之前,如果可變的 MemTable 大小超過了限制,則會觸發 flush。

    在 5.6 及其之后的版本,所有被 write buffer manager 管理的內存都會被計算在內,不僅僅是 MemTable 的內存使用。5.6 之前的版本,內存的計算僅僅按照 MemTable 的實際使用來計算的。

    MemTable 使用 Block Cache 的內存

    從 5.6 版本之后,用戶可以配置 MemTable 使用 Block Cache 的內存。這個配置不管是否開啟了 MemTable 內存的限制。

    大多數情況,Block Cache 中 MemTable 相比 data block 僅僅占比較小的比例。所以當用戶開啟這個功能,Block Cache 的容量將會包含所有 Block Cache 和 MemTable 的內存使用。如果用戶啟用?cache_index_and_filter_blocks,那么 RocksDB 中三個主要的內存使用都會被單個上限進行限制。

    下面是實現原理:每次分配給 MemTable 1MB 的內存,WriteBufferManager 將會放 1MB 的虛擬項到 Block Cache 中,這樣 Block Cache 就可以知道實際的使用大小,從而淘汰 Block 來獲取內存空間。對于 MemTable 內存使用減少的情況,WriteBufferManager 并不會立即刪除這些虛擬項,而是在內存使用量顯著降低時再緩慢地刪除這些虛擬項。這是因為 MemTable 的內存總是在自然地上下浮動,因此我們嘗試減少對 Block Cache 的干擾。

    通過以下方式開啟這個功能:

    • 將 Block Cache 傳遞給即將使用的 WriteBufferManager
    • 將 MemTable 期望使用的最大內存傳遞給 WriteBufferManager
    • 設置 Block Cache 的容量為 data block 緩存和 MemTable 的總大小

    總結

    以上是生活随笔為你收集整理的rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。