2个版本

0.1.3 2021年3月13日
0.1.0 2021年2月12日

#1095 in 数据库接口

LGPL-3.0

90KB
2.5K SLoC

WooriDB

用户指南

WooriDB是一个通用(实验性)时间序列数据库,这意味着它包含所有按DateTime索引的实体注册表。它是无模式的键值存储,并使用自己的类似于SparQL和Crux的Datalog查询语法。

其他一些功能包括

  • 使用ENCRYPT关键字对键内容进行哈希。
  • 哈希值会被过滤掉,只能使用CHECK关键字进行验证。
  • 输入和输出使用Ron模式。
    • 通过功能支持JSON。
    • 通过功能支持EDN。
  • 实体按entity_name(实体树)、DateTime(时间序列)和Uuid(实体ID)索引。实体格式是一个HashMap,其中键是字符串,值是支持Types
  • 本地存储持久数据。
    • 作为后端开发S3
    • 作为后端开发Postgres
    • 作为后端开发DynamoDB
  • 使用P后缀时能够处理非常大的数字。
    • 例如:98347883122138743294728345738925783257325789353593473247832493483478935673.9347324783249348347893567393473247832493483478935673P
  • 配置通过环境变量完成。
    • 非敏感配置使用Config.toml完成。
    • CORS
  • 通过会话令牌进行身份验证和授权
    • 创建和删除ADMINs/new用户。
  • 条件更新
  • 可能的关系代数
  • 实体历史

Woori意味着our,尽管我最初独立开发了此数据库,但根据我的文化,将所有为我们的社区和我们社区所做的所有事情都称为ours

本项目深受以下项目的启发

安装

要运行 WooriDB,机器上必须已安装 Rust。有两种方法可以这样做

  1. 访问 rustup.rs 并复制那里的命令,对于 Unix 系统是 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. 克隆 WooriDB 并执行 make setup

执行 WooriDB

  • 发布模式性能:在项目根目录下执行 make release 进行性能优化。
  • 发布模式大小:在项目根目录下执行 make run 进行大小优化。
  • 调试模式:在项目根目录下执行 make debug

Docker

您可以在 naomijub/wooridb 找到最新的 Docker 镜像。当前最稳定的标签是 beta-3。要执行 Docker 容器,请运行

  • docker run -p 1438:1438 naomijubs/wooridb:beta-3 debug 用于调试模式。
  • docker run -1438:1438 -AUTH_HASHING_COST=8 -ADMIN=your-admin-id -ADMIN_PASSWORD=your-admin-pswd naomijubs/wooridb:beta-3 run 用于大小优化。
  • docker run -1438:1438 -AUTH_HASHING_COST=8 -ADMIN=your-admin-id -ADMIN_PASSWORD=your-admin-pswd naomijubs/wooridb:beta-3 release 用于性能优化。
  • 所有 -/---env 都可以替换为 --env-file path/to/your/.env。您的 .env 文件应包含以下字段
HASHING_COST=16
PORT=1438
AUTH_HASHING_COST=8
ADMIN=your-admin-id
ADMIN_PASSWORD=your-admin-pswd

用法

  • 响应格式为RON。将支持JSONEDN,但这将通过使用功能来实现。
  • 目前只使用持久性本地内存。对S3PostgresDynamoDB的支持也将通过使用功能来实现。
  • 精确浮点数或大于f64::MAXi128::MAX的数字可以通过在末尾加上大写字母P来定义。
    • 注意:此类型不能通过UPDATE CONTENT来更新。
    • 例:INSERT {a: 98347883122138743294728345738925783257325789353593473247832493483478935673.9347324783249348347893567393473247832493483478935673P, } INTO my_entity
  • 不支持BLOB。请参阅To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem
  • 要配置哈希成本,需要一些环境变量
HASHING_COST=16
PORT=1438

待办事项

  • 从ztsd文件中读取信息问题28
  • 基准测试。PRs 61 93

当前基准测试

MacBook Pro,2.2 GHz Intel Core i7,16 GB 2400 MHz DDR4

  • create_entity时间:[15.269 ms 15.332 ms 15.396 ms]
  • insert_entity时间:[27.438 ms 28.177 ms 28.958 ms]
  • update_set_entity时间:[22.969 ms 23.382 ms 23.839 ms]
  • update_content_entity时间:[23.181 ms 23.578 ms 24.037 ms]
  • delete_entity时间:[41.999 ms 42.719 ms 43.492 ms] - 过滤了400秒
  • evict_entity_id时间:[41.387 ms 42.029 ms 42.731 ms] - 过滤了400秒
  • evict_entity时间:[31.582 ms 31.805 ms 32.039 ms] - 过滤了400秒
  • select_all 20个实体时间:[23.692 ms 24.183 ms 24.690 ms]
  • select_all 10个实体时间:[22.018 ms 22.301 ms 22.586 ms]
  • select_all 1个实体时间:[19.963 ms 20.679 ms 21.412 ms]

依赖项

~1.3–2MB
~44K SLoC