Dorea DB 数据库系统

232 阅读3分钟

本项目使用 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 鉴权,且不同数据库可以分开设置密码。

日志型存储

本套系统的存储方案采用 日志型存储 。任何增删改的操作在系统中都是“新增条目”的行为,这大大增加了系统写入的效率。

而索引信息则是在系统启动时则已经全部加载完毕,后续会根据缓存淘汰机制消除某些不使用的数据库库索引。

这种设计方案大大增强了系统的处理效率。

语言支持

鉴于这是个人的练习项目,所以目前实现的预言包并不多:

以上包都可以在相关语言的包管理网站中找到:(如 PyPI 和 Crates )