本项目使用 Rust 开发:个人的练习项目,欢迎大家提建议!
前言
Dorea 是一款 K-V 数据库系统,它使用 Rust 语言开发,代码也已经在 GitHub 开源:DoreaDB
当时开发这个项目的原因主要是自己正好在学习 Rust 语言,正好想尝试使用它做一个数据储存系统。目前这个项目还处于开发阶段,可以作为学习和练习项目使用。(目前我正在完成其他语言接入功能)
数据类型
它对于我们常用的数据类型都有支持:
- Number (数字)
- String(字符串)
- Boolean(真假值)
- Binary(二进制数据集)
同时还支持复合类型:
- List (数组列表)
- Dict(字典集)
- Tuple(元组)
其中复合类型能嵌其他任何类型(包括其本身)
在以上 7 种类型的加持下,基本上可以完成所有开发需求。
JSON 原生支持
Dorea 系统中使用了一种自己开发的数据格式:Doson (它是 JSON 的拓展版)
但是 Dorea 中内置了 DOSON <-> JSON 的转换功能,甚至你可以直接的使用 JSON 来代替 DOSON 数据(通过在连接中发送转换命令)
以下展示了 DOSON 类型结构:
{
"#": "这是DOSON中的一些数据类型展示",
"String": "Hello World",
"Number": 3.14,
"Boolean": true,
"Binary": binary!(...),
"List": [...],
"Dict": {...},
"Tuple": (...),
}
以下做一个列子展示 DOSON 转换 JSON:
// DOSON
{
"type": "data",
"constant": ("PI", 3.14),
"file": binary!(..binary_data..),
"timestamp": 1636732636016,
}
// JSON
{
"Dict": {
"type": { "String": "data" },
"constant": { "Tuple": [{"String": "PI"}, {"Number": 3.14}] },
"file": { "Binary": "Base64Value" },
"timestamp": { "Number": 1636732636016 },
}
}
DOSON 所转换的 JSON 结构比较复杂,但 Dorea 中有快速转换的接口供开发者调用。
开发 DOSON 的目的仅因为后续我可能会增加更多数据类型。 DOSON 目前已存在的解析器仅有:DOSON(Rust)| DOSON4PY(Python)
其他语言接口则都是使用 JSON 的方式。
Web 服务通道
传统的数据库系统都是基于 TCP + 自定协议 完成连接,但是 Dorea 在前者的基础上还添加了 Web 的连接方式,系统会自动打开一个 Web-API 服务供开发者调用,开发者可以在上面运行,完成所有数据库操作。(同时含有数据类型转换的特殊API)
例如:
http://localhost:3451/@default/get
{
"key": "foo"
}
"bar"
注:Web服务使用 JWT 鉴权,且不同数据库可以分开设置密码。
日志型存储
本套系统的存储方案采用 日志型存储 。任何增删改的操作在系统中都是“新增条目”的行为,这大大增加了系统写入的效率。
而索引信息则是在系统启动时则已经全部加载完毕,后续会根据缓存淘汰机制消除某些不使用的数据库库索引。
这种设计方案大大增强了系统的处理效率。
语言支持
鉴于这是个人的练习项目,所以目前实现的预言包并不多:
- Deno 语言包:dorea-deno-driver
- Python 语言包:dorea-python-driver
- Rust 语言包:dorea-client
以上包都可以在相关语言的包管理网站中找到:(如 PyPI 和 Crates )