首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Rust每周一库】sled-嵌入式数据库

简介

Sled是基于Bw树构建的嵌入式KV数据库,其API接近于一个线程安全的BTreeMap。而其Bw树的数据结构加上包括crossbeam-epoch的“GC”等技术,使得Sled成为一个lock-free的数据库而在并发环境中傲视群雄。忘记那些慢吞吞的锁吧~而官方宣称在一台16核的机器上,在一个小数据集上可以达到每分钟10亿次操作(95%读核5%写)

要使用sled,只需要在Cargo.toml中加入

sled = "0.32"

例子

基础用法

打开数据库let tree = sled::open("/tmp/welcome-to-sled").expect("open");

// 插入KV,读取Key对应的值tree.insert("KEY1", "VAL1");assert_eq!(tree.get(&"KEY1"), Ok(Some(sled::IVec::from("VAL1"))));

// 范围查询for kv in tree.range("KEY1".."KEY9") { ...}

// 删除tree.remove(&"KEY1");

// atomic compare and swap,可以用在并发编程中tree.compare_and_swap("KEY1", Some("VAL1"), Some("VAL2"));

// 阻塞直到所有修改都写入硬盘tree.flush();

处理结构体

use { byteorder::{BigEndian, LittleEndian}, zerocopy::{ byteorder::U64, AsBytes, FromBytes, LayoutVerified, Unaligned, },};

// 键结构体// zerocopy::byteorder::U64保证了数据对齐问题#[derive(FromBytes, AsBytes, Unaligned)]#[repr(C)]struct Key { a: U64, b: U64,}

// 值结构体#[derive(FromBytes, AsBytes, Unaligned)]#[repr(C)]struct Value { count: U64, whatever: [u8; 16],}

let key = Key { a: U64::new(21), b: U64::new(890) };

// 取得键所对应的值,并对其施加给定函数灿做db.update_and_fetch(key.as_bytes(), |value_opt| { if let Some(existing) = value_opt { let mut backing_bytes = sled::IVec::from(existing);

// 验证数据对齐(这里其实不是必须的,因为我们使用了U64) let layout: LayoutVerified = LayoutVerified::new_unaligned(&mut *backing_bytes) .expect("bytes do not fit schema");

// 得到底层数据的可变引用 let value: &mut Value = layout.into_mut();

let new_count = value.count.get() + 1;

println!("incrementing count to {}", new_count);

value.count.set(new_count);

Some(backing_bytes) } else { println!("setting count to 0");

// 初始化一个Value Some(sled::IVec::from( Value { count: U64::new(0), whatever: [0; 16] }.as_bytes(), )) }})?;

小结

Sled是当前Rust嵌入式数据库中有力的候选人之一。当然,除了还处于beta版这一问题外,sled有时还会消耗较多的存储(这一点是比起RocksDB的不足之处)。人无完人嘛,让我们一起期待其稳定版早日上线~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200529A0R2D300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券