wedb_embed 0.1.2

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use crate::{
  api::timeseries::conf::{
    AggregationType, DuplicatePolicy, TSCreateOption, TSInfoResult, TSMGetOption, TSMGetResult,
    TSMRangeOption, TSMRangeResult, TSRangeOption,
  },
  error::Result,
  traits::DbLike,
};

/// 时序数据结构操作接口 (TimeSeries)
pub trait TimeSeries: DbLike {
  #[inline]
  fn ts_create<K: AsRef<[u8]>>(
    &self,
    key: K,
    retention_ms: u64,
    duplicate_policy: DuplicatePolicy,
    labels: &[(&str, &str)],
  ) -> Result<()> {
    let opt = TSCreateOption {
      retention_time: retention_ms,
      duplicate_policy,
      labels: labels
        .iter()
        .map(|(k, v)| (k.to_string(), v.to_string()))
        .collect(),
      ..Default::default()
    };
    self.ts_create_opt(key, &opt)
  }
  fn ts_create_opt<K: AsRef<[u8]>>(&self, key: K, opt: &TSCreateOption) -> Result<()>;
  fn ts_alter<K: AsRef<[u8]>>(
    &self,
    key: K,
    retention_ms: Option<u64>,
    chunk_size: Option<u64>,
    duplicate_policy: Option<DuplicatePolicy>,
    labels: Option<Vec<(String, String)>>,
  ) -> Result<()>;
  fn ts_add<K: AsRef<[u8]>>(&self, key: K, timestamp: u64, value: f64) -> Result<u64>;
  fn ts_add_opt<K: AsRef<[u8]>>(
    &self,
    key: K,
    timestamp: u64,
    value: f64,
    on_duplicate: Option<DuplicatePolicy>,
    create_opt: Option<&TSCreateOption>,
  ) -> Result<u64>;
  fn ts_madd<K: AsRef<[u8]>>(&self, items: &[(K, u64, f64)]) -> Result<Vec<Result<u64>>>;
  fn ts_incrby<K: AsRef<[u8]>>(&self, key: K, value: f64, timestamp: Option<u64>) -> Result<u64>;
  fn ts_incrby_opt<K: AsRef<[u8]>>(
    &self,
    key: K,
    value: f64,
    timestamp: Option<u64>,
    create_opt: Option<&TSCreateOption>,
  ) -> Result<u64>;
  fn ts_decrby<K: AsRef<[u8]>>(&self, key: K, value: f64, timestamp: Option<u64>) -> Result<u64>;
  fn ts_decrby_opt<K: AsRef<[u8]>>(
    &self,
    key: K,
    value: f64,
    timestamp: Option<u64>,
    create_opt: Option<&TSCreateOption>,
  ) -> Result<u64>;
  fn ts_get<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<(u64, f64)>>;
  fn ts_range<K: AsRef<[u8]>>(&self, key: K, from_ts: u64, to_ts: u64) -> Result<Vec<(u64, f64)>>;
  fn ts_revrange<K: AsRef<[u8]>>(
    &self,
    key: K,
    from_ts: u64,
    to_ts: u64,
  ) -> Result<Vec<(u64, f64)>>;
  fn ts_range_opt<K: AsRef<[u8]>>(&self, key: K, opt: &TSRangeOption) -> Result<Vec<(u64, f64)>>;
  fn ts_del<K: AsRef<[u8]>>(&self, key: K, from_ts: u64, to_ts: u64) -> Result<usize>;
  fn ts_mget(&self, opt: &TSMGetOption) -> Result<Vec<TSMGetResult>>;
  fn ts_mrange(&self, opt: &TSMRangeOption) -> Result<Vec<TSMRangeResult>>;
  fn ts_mrevrange(&self, opt: &TSMRangeOption) -> Result<Vec<TSMRangeResult>>;
  fn ts_info<K: AsRef<[u8]>>(&self, key: K) -> Result<TSInfoResult>;
  fn ts_queryindex(&self, filters: &[String]) -> Result<Vec<String>>;
  fn ts_createrule<SK: AsRef<[u8]>, DK: AsRef<[u8]>>(
    &self,
    src_key: SK,
    dst_key: DK,
    aggregator: AggregationType,
    bucket_duration: u64,
    alignment: Option<u64>,
  ) -> Result<()>;
  fn ts_deleterule<SK: AsRef<[u8]>, DK: AsRef<[u8]>>(&self, src_key: SK, dst_key: DK)
  -> Result<()>;
}