WeeDB
A thin wrapper around RocksDB.
Example
use weedb::{rocksdb, Caches, ColumnFamily, ColumnFamilyOptions, Migrations, WeeDb};
weedb::tables! {
pub struct MyTables<Caches> {
pub my_table: MyTable,
}
}
struct MyTable;
impl ColumnFamily for MyTable {
const NAME: &'static str = "my_table";
fn read_options(opts: &mut rocksdb::ReadOptions) {
opts.set_verify_checksums(false);
}
fn write_options(opts: &mut rocksdb::WriteOptions) {
}
}
impl ColumnFamilyOptions<Caches> for MyTable {
fn options(opts: &mut rocksdb::Options, caches: &mut Caches) {
opts.set_write_buffer_size(128 * 1024 * 1024);
let mut block_factory = rocksdb::BlockBasedOptions::default();
block_factory.set_block_cache(&caches.block_cache);
block_factory.set_data_block_index_type(rocksdb::DataBlockIndexType::BinaryAndHash);
opts.set_block_based_table_factory(&block_factory);
opts.set_optimize_filters_for_hits(true);
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let tempdir = tempfile::tempdir()?;
let caches = Caches::with_capacity(10 << 23);
let db = WeeDb::<MyTables>::builder(&tempdir, caches)
.with_name("test")
.with_metrics_enabled(true)
.with_options(|opts, _ctx| {
opts.set_level_compaction_dynamic_level_bytes(true);
opts.set_zstd_max_train_bytes(32 * 1024 * 1024);
opts.set_compression_type(rocksdb::DBCompressionType::Zstd);
opts.set_log_level(rocksdb::LogLevel::Error);
opts.set_keep_log_file_num(2);
opts.set_recycle_log_file_num(2);
opts.create_if_missing(true);
opts.create_missing_column_families(true);
})
.build()?;
let mut migrations = Migrations::with_target_version([0, 1, 0]);
migrations.register([0, 0, 0], [0, 1, 0], |db| {
Ok(())
})?;
db.apply(migrations)?;
let my_table = &db.tables().my_table;
my_table.insert(b"asd", b"123")?;
assert!(my_table.get(b"asd")?.is_some());
Ok(())
}
How to generate grafana dashboard
cd scripts
python3 -m venv venv
pip install -r requirements.txt
python rocksdb_metrics.py dashboard.json
Contributing
We welcome contributions to the project! If you notice any issues or errors,
feel free to open an issue or submit a pull request.
License
Licensed under either of
at your option.