wedb_embed 0.1.2

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use aok::Void;
use tempfile::tempdir;
use wedb_embed::{Compression, Conf, PersistMode, WeDb, prelude::*};

#[test]
fn test_conf_enum_and_unified_open() -> Void {
  let dir = tempdir()?;
  let db = WeDb::open(
    dir.path(),
    [
      Conf::CacheSize(64 * 1024 * 1024),
      Conf::DataBlockSize(4 * 1024),
      Conf::MetaBlockSize(4 * 1024),
      Conf::DataMemtableSize(16 * 1024 * 1024),
      Conf::MetaMemtableSize(8 * 1024 * 1024),
      Conf::KvSeparationThreshold(2048),
      Conf::DataHashRatio(0.8),
      Conf::ExpectPointReadHits(true),
      Conf::PersistIntervalMs(20),
      Conf::PersistMode(PersistMode::SyncData),
      Conf::Compression(Compression::Lz4),
      Conf::JournalCompression(Compression::None),
      Conf::Temporary(false),
    ],
  )?;

  db.set("conf_key", "conf_val", &[])?;
  let val = db.get("conf_key")?;
  assert_eq!(val, Some(b"conf_val".to_vec()));

  Ok(())
}

#[test]
fn test_default_conf_open() -> Void {
  let dir = tempdir()?;
  let db = WeDb::open(dir.path(), [])?;
  db.set("default_key", "default_val", &[])?;
  assert_eq!(db.get("default_key")?, Some(b"default_val".to_vec()));
  Ok(())
}

#[test]
fn test_conf_extended_options() -> Void {
  let dir = tempdir()?;
  let db = WeDb::open(
    dir.path(),
    [
      Conf::WorkerThreads(2),
      Conf::MaxJournalingSize(64 * 1024 * 1024),
      Conf::MaxCachedFiles(128),
      Conf::DisableKvSeparation,
      Conf::ManualJournalPersist(false),
      Conf::PersistMode(PersistMode::Buffer),
      Conf::Temporary(true),
    ],
  )?;

  db.set("ext_key", "ext_val", &[])?;
  assert_eq!(db.get("ext_key")?, Some(b"ext_val".to_vec()));
  Ok(())
}