From b01acb71a97f3ef809e15ce5c8082f92b7c28b0e Mon Sep 17 00:00:00 2001 From: Martin Ek Date: Sun, 27 Jan 2019 22:17:03 +0000 Subject: [PATCH] Use an options struct --- src/db_options.rs | 35 +++++++++++++++++++++-------------- src/lib.rs | 15 +++++++++++++++ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/db_options.rs b/src/db_options.rs index d4d2fc1..785c831 100644 --- a/src/db_options.rs +++ b/src/db_options.rs @@ -27,7 +27,7 @@ use merge_operator::{ use slice_transform::SliceTransform; use { BlockBasedIndexType, BlockBasedOptions, DBCompactionStyle, DBCompressionType, DBRecoveryMode, - MemtableFactory, Options, WriteOptions, + MemtableFactory, Options, PlainTableFactoryOptions, WriteOptions, }; pub fn new_cache(capacity: size_t) -> *mut ffi::rocksdb_cache_t { @@ -982,22 +982,29 @@ impl Options { } } - // See https://github.com/facebook/rocksdb/wiki/PlainTable-Format. - // - // Defaults: - // user_key_len: 0 (variable length) - // bloom_bits_per_key: 10 - // has_table_ratio: 0.75 - // index_sparseness: 16 - pub fn set_plain_table_factory(&mut self, user_key_len: u32, bloom_bits_per_key: i32, - hash_table_ratio: f64, index_sparseness: usize) { + /// See https://github.com/facebook/rocksdb/wiki/PlainTable-Format. + /// + /// ``` + /// use rocksdb::{Options, PlainTableFactoryOptions}; + /// + /// let mut opts = Options::default(); + /// let factory_opts = PlainTableFactoryOptions { + /// user_key_length: 0, + /// bloom_bits_per_key: 20, + /// hash_table_ratio: 0.75, + /// index_sparseness: 16, + /// }; + /// + /// opts.set_plain_table_factory(factory_opts); + /// ``` + pub fn set_plain_table_factory(&mut self, options: PlainTableFactoryOptions) { unsafe { ffi::rocksdb_options_set_plain_table_factory( self.inner, - user_key_len, - bloom_bits_per_key, - hash_table_ratio, - index_sparseness, + options.user_key_length, + options.bloom_bits_per_key, + options.hash_table_ratio, + options.index_sparseness, ); } } diff --git a/src/lib.rs b/src/lib.rs index cb46114..8dbd1bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -167,6 +167,21 @@ pub enum MemtableFactory { }, } +/// Used with DBOptions::set_plain_table_factory. +/// See https://github.com/facebook/rocksdb/wiki/PlainTable-Format. +/// +/// Defaults: +/// user_key_length: 0 (variable length) +/// bloom_bits_per_key: 10 +/// hash_table_ratio: 0.75 +/// index_sparseness: 16 +pub struct PlainTableFactoryOptions { + pub user_key_length: u32, + pub bloom_bits_per_key: i32, + pub hash_table_ratio: f64, + pub index_sparseness: usize, +} + /// Database-wide options around performance and behavior. /// /// Please read [the official tuning guide](https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide), and most importantly, measure performance under realistic workloads with realistic hardware.