2个版本
| 0.1.3 | 2021年3月13日 |
|---|---|
| 0.1.0 | 2021年2月12日 |
#1095 in 数据库接口
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。
本项目深受以下项目的启发
- Crux;
- Datomic;
- Prometheus
- SPARQL.
- 数据库内部结构
- 数据库系统概念
- 设计数据密集型应用程序
- 教授 Andy Pavlo 的数据库课程。
- 时间序列数据中的零信任?
安装
要运行 WooriDB,机器上必须已安装 Rust。有两种方法可以这样做
- 访问 rustup.rs 并复制那里的命令,对于 Unix 系统是
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh。 - 克隆 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。将支持JSON和EDN,但这将通过使用功能来实现。 - 目前只使用持久性本地内存。对
S3、Postgres和DynamoDB的支持也将通过使用功能来实现。 - 精确浮点数或大于
f64::MAX和i128::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
待办事项
当前基准测试
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_all20个实体时间:[23.692 ms 24.183 ms 24.690 ms]select_all10个实体时间:[22.018 ms 22.301 ms 22.586 ms]select_all1个实体时间:[19.963 ms 20.679 ms 21.412 ms]
依赖项
~1.3–2MB
~44K SLoC