问题描述
我正在查看 RocksDB 选项配置示例:
opts = rocksdb.Options()
opts.create_if_missing = True
opts.max_open_files = 300000
opts.write_buffer_size = 67108864
opts.max_write_buffer_number = 3
opts.target_file_size_base = 67108864
opts.table_factory = rocksdb.BlockBasedTableFactory(
filter_policy=rocksdb.BloomFilterPolicy(10),block_cache=rocksdb.LRUCache(2 * (1024 ** 3)),block_cache_compressed=rocksdb.LRUCache(500 * (1024 ** 2)))
https://python-rocksdb.readthedocs.io/en/latest/tutorial/
它说
它分配了 2.5G 的缓存,使用布隆过滤器进行更快的查找和 在写入 .sst 文件之前在内存中保留更多数据 (64 MB)。
这是否意味着它使用的最大内存为 2.5GB 或 64MB?
为什么缓存是 2.5GB? (2 * (1024 ** 3))
是 20 亿,不是 25 亿?
解决方法
这是否意味着它使用的最大内存为 2.5GB 或 64MB?
没有。这意味着块缓存将花费 2.5GB,内存表将花费 64 * 3
MB,因为有 3 个 (opts.max_write_buffer_number
) 缓冲区,每个缓冲区的大小为 64MB (opts.write_buffer_size
) .除此之外,Rocksdb 还需要一些其他内存用于索引和布隆文件块。查看this了解详情。
为什么缓存是 2.5GB? (2 * (1024 ** 3)) 是 20 亿,不是 25 亿?
因为有 2GB 未压缩块缓存 (block_cache
) 和 0.5GB 压缩块缓存 (block_cache_compressed
)。