#关系型 #内存中 #数据库

macrodb

为Rust宏生成的内存关系型数据库

2个版本

0.1.1 2023年1月7日
0.1.0 2022年12月28日

#176 in 数据库实现

MIT 许可证

30KB
310

MacroDB

这是一个Rust包,允许您自动生成内存关系型数据库的代码。它支持索引,包括唯一索引,以及外键。它可以使用HashMap以及BTreeMap作为索引。

从高层次来看,该包通过让您定义一个包含所有表和索引的数据库结构,然后调用宏来生成适当的插入、更新和删除方法来工作。

它不支持事务、并发(除Rust的通常语义外,即可以有多个读取者或单个写入者)或持久性。

基准测试

生成数据库的速度取决于您选择的数据类型(BTreeMap或HashMap)以及索引的数量。为了大致估计内存数据库的速度,此存储库包含基准测试,该测试将此包(使用各种存储数据类型)与在内存中运行的流行SQLite数据库进行比较。测试在一个具有两个常规索引和一个唯一索引的表上运行。

在MacBook Air M2上运行基准测试,每个基准测试使用一百万(1,000,000)行和随机输入(非顺序),这是性能。所有值都以Kelem/s(每秒千行)表示。数值越高越好。

数据类型 插入(Kelem/s) 更新(Kelem/s) 删除(Kelem/s) 克隆(Kelem/s)
hashbrown::{HashMap,HashSet} 2,273 754 790 1,286
std::{HashMap,HashSet} 1,188 614 605 1,279
std::{BTreeMap,BTreeSet} 586 200 312 3,933
im::{HashMap,HashSet} 826 347 442 +inf
im::{OrdMap,OrdSet} 344 138 248 +inf
avl::{AvlTreeMap,AvlTreeSet} 532 162 238 1,952
btree_slab::{BTreeMap,BTreeSet} 372 121 216 1,821
SQLite 388 138 309 n/a

可以通过将benches/single_table.rs中的插入、更新和删除计数设置为100万并运行cargo bench来重现此基准测试。

值得注意的是,来自im包的数据类型是按写复制且可以廉价地克隆。这就是为什么克隆时间表示为+inf的原因。

示例

请参阅此存储库中的examples/

许可证

MIT,请参阅LICENSE.md

依赖项