2个版本
0.1.1 | 2023年1月7日 |
---|---|
0.1.0 | 2022年12月28日 |
#176 in 数据库实现
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