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_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