#cache #disk #applications #string #db #numbers

microdb

一个包含缓存、磁盘存储等的非常小的程序内数据库

13 个版本

0.3.5 2023年7月25日
0.3.4 2023年6月24日
0.2.0 2023年6月20日
0.1.5 2023年6月20日

#673数据库接口

Download history 81/week @ 2024-03-31

96 每月下载量

MIT 许可证

53KB
1K SLoC

MicroDB

用于在内存不足以存储大量数据的程序中的微型数据库

已完成功能

  • 磁盘存储
  • 获取、设置、分配、释放
  • 缓存
  • 错误自动恢复
  • 基本类型(数字、字符串、vecs、选项、结果)的序列化
  • 易于实现的序列化
  • 可推导序列化
  • (可能) 支持通过 TCP 的多客户端
  • (可能) 将操作镜像到备份服务器(需要 TCP)

如何使用

MicroDB 在您的应用程序运行的地方运行:保存、缓存同步等都在您的应用程序的另一个线程中简单发生。

要开始,创建一个数据库

let db = MicroDB::create(
    "example_db.data.mdb",
    "example_db.meta.mdb",
    MicroDB::sensible_cache_period(
        /*requests of unique objects per second*/10.0, 
        /*max ram usage*/0.1, 
        /*average object size in mb*/0.01, 
        /*safety (how important staying within ram spec is)*/1.0),
    MicroDB::sensible_block_size(
        /*object amount*/500.0, 
        /*average object size in bytes*/10_0000.0, 
        /*object size fluctuation in bytes*/0.0, 
        /*storage tightness*/1.0
    ),
)

或使用 ::new 加载一个,并省略 block_size 参数。

现在您就可以开始了!

它有多快?

以下是一个显示对一个值请求量的速度的测试

Setting test --raw--> true
Reading test 10000 times.
Done! Took 1ms: 0.0001ms per read.

以下是一个显示在10000个值上每个值一个请求的速度的测试

Setting horizontal_test/{0..10000} --raw--> true
Reading back all values...
Done! Write took 5570ms: 0.557ms per write; Read took 143ms: 0.0143ms per read.

如你所见,速度相当低,实际上比像 Postgres 这样的 SQL 数据库在这些数据集大小的数据库中要快得多。这个数据库不是为处理大型数据集而设计的,但它对小型数据集非常有效。

目前,数据库在读取时大约是 O(log n) 的缩放,但在写入时较慢(不确定有多慢)。

依赖关系