日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

翻譯者:fanrui

Write buffer manager 幫助用戶控制多個(gè) column family 和 DB 實(shí)例的 MemTable 內(nèi)存消耗。通過 Write Buffer Manager,用戶可以實(shí)現(xiàn):

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

    限制 MemTable 的總內(nèi)存

    創(chuàng)建 write buffer manager 對(duì)象時(shí)可以給出內(nèi)存限制。RocksDB 將會(huì)盡量控制總的使用內(nèi)存在限制以下。

    在 5.6 及其之后的版本,如果可變的 MemTable 的總大小超過了內(nèi)存限制的 90%,那么 RocksDB 的相應(yīng) Column Family 就會(huì)觸發(fā) flush。如果實(shí)際的內(nèi)存使用超過了限制,即使可變的 MemTable 使用的內(nèi)存低于 90%,也會(huì)非常積極地觸發(fā) flush。在 5.6 版本之前,如果可變的 MemTable 大小超過了限制,則會(huì)觸發(fā) flush。

    在 5.6 及其之后的版本,所有被 write buffer manager 管理的內(nèi)存都會(huì)被計(jì)算在內(nèi),不僅僅是 MemTable 的內(nèi)存使用。5.6 之前的版本,內(nèi)存的計(jì)算僅僅按照 MemTable 的實(shí)際使用來計(jì)算的。

    MemTable 使用 Block Cache 的內(nèi)存

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

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

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

    通過以下方式開啟這個(gè)功能:

    • 將 Block Cache 傳遞給即將使用的 WriteBufferManager
    • 將 MemTable 期望使用的最大內(nèi)存?zhèn)鬟f給 WriteBufferManager
    • 設(shè)置 Block Cache 的容量為 data block 緩存和 MemTable 的總大小

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。