前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2023-07-19 Cannonball -- Rust 构建的 QEMU 插件的框架

【Rust日报】2023-07-19 Cannonball -- Rust 构建的 QEMU 插件的框架

作者头像
MikeLoveRust
发布2023-09-26 17:54:01
2340
发布2023-09-26 17:54:01
举报

Cannonball Rust 构建的 QEMU 插件的框架

Cannonball 是一个用 Rust 构建 QEMU 插件的框架!您可以在 C 语言的 QEMU TCG 插件中执行的任何操作,都可以使用cannonball。编写以最小的开销和尽可能多的功能运行的插件!

例子

这里提供了几个例子!

  • jaivana

一个简单的跟踪器,将一组可配置的事件记录到文件或标准输出中。

  • mons meg

一个跟踪器,记录与 Jaivana 相同的事件,但使用 Tokio 在异步环境中运行跟踪,通过 UNIX 套接字而不是匿名管道与主机进行通信。 看看它们,它们是学习如何使用这个框架的最佳方式。

安装

安装 只需将其添加到您的 Cargo.toml:

代码语言:javascript
复制
cannonball = "0.2.4"

Jaivana 的演示例子: https://github.com/novafacing/cannonball/tree/main/examples/jaivana

kiddb 基于 Rust 的嵌入式存储引擎

整体设计参考LevelDB,旨在作为NewSQL数据库的存储引擎

  • 支持嵌入式/单机存储/远程调用等多应用场景
  • 以Kiss作为开发理念,设计以简单而高效为主导
  • 实现MVCC以支持ACID
  • 性能,BenchMark 读取吞吐量约为 Sled 的两倍,且大数据量下的读取顺序平均延迟为 1μs 左右
  • 远程连接使用ProtoBuf实现,支持多语言通信
  • 极小内存占用(占用/大量冷数据)
  • 安全读取

组件引入

代码语言:javascript
复制
kip_db = "0.1.1-alpha.0"

代码

代码编译
代码语言:javascript
复制
cargo build
代码编译(正式环境)
代码语言:javascript
复制
cargo build --release
单元测试
代码语言:javascript
复制
cargo test
性能基准测试
代码语言:javascript
复制
cargo bench

Docker镜像编译

编译镜像
代码语言:javascript
复制
docker build -t kould/kip-db:v1 .
运行镜像
代码语言:javascript
复制
docker run kould/kip-db:v1

直接调用(基本使用)

代码语言:javascript
复制
/// 指定文件夹以开启一个KvStore
let kip_db = LsmStore::open("/welcome/kip_db").await?;

// 插入数据
kip_db.set(&b"https://github.com/KKould/KipDB", Bytes::from(&b"your star plz"[..])).await?;
// 获取数据
let six_pence = kip_db.get(&b"my deposit").await?;
// 已占有硬盘大小
let just_lot = kip_db.size_of_disk().await?
// 已有数据数量
let how_many_times_you_inserted = kip_db.len().await?;
// 删除数据
kip_db.remove(&b"ex girlfriend").await?;

// 创建事务
let mut transaction = kip_db.new_transaction().await?;
// 插入数据至事务中
transaction.set(&b"this moment", Bytes::from(&b"hope u like it"[..]));
// 删除该事务中key对应的value
transaction.remove(&b"trouble")?;
// 获取此事务中key对应的value
let ping_cap = transaction.get(&b"dream job")?;
// 提交事务
transaction.commit().await?;

// 创建持久化数据迭代器
let guard = kip_db.iter().await?;
let mut iterator = guard.iter()?;

// 获取下一个元素
let hello = iterator.next_err()?;
// 移动至第一个元素
let world = iterator.seek(Seek::Last)?;

// 强制数据刷入硬盘
kip_db.flush().await?;
  • https://github.com/KipData/KipDB
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-21 16:51,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cannonball Rust 构建的 QEMU 插件的框架
    • 例子
      • 安装
      • kiddb 基于 Rust 的嵌入式存储引擎
        • 组件引入
          • 代码
            • 代码编译
            • 代码编译(正式环境)
            • 单元测试
            • 性能基准测试
          • Docker镜像编译
            • 编译镜像
            • 运行镜像
          • 直接调用(基本使用)
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档