7 个版本 (稳定版)

1.5.0-beta.12024年4月17日
1.5.0-beta.02024年4月16日
1.3.0 2023年9月17日
1.2.1 2023年8月26日

数据库接口 中排名第 389

Download history 6/week @ 2024-04-01 183/week @ 2024-04-15

每月下载量 377

GPL-3.0-only

135KB
1.5K SLoC

Image of program, small fat cat laying on a server computer

程序艺术由 Crisis 制作。

smol_db

为小型数据库设计的客户端和服务器,这些数据库只需要快速设置和删除、读写。该数据库的目标是在适用的其他项目中使用它,并使其尽可能易于使用。数据库的结构很简单,就是一个哈希表。

本项目由 4 个子项目组成

  • smol_db_server:一个等待连接的服务器程序,并在端口 8222 上提供服务。它还处理运行数据库所需的文件。
  • smol_db_client:一个库,可以用来与服务器程序接口。
  • smol_db_common:一个库,用于运行服务器,如果 smol_db_server 不够用,这个库包含构建服务器所需的所有必要组件,该服务器可以处理请求并处理它们。
  • smol_db_viewer:一个示例程序,允许用户连接到 smol_db_server,程序可以连接、查看、创建、删除、读取和写入给定服务器上的数据库。
  • smol_db_dylib:一个 FFI 库(WIP),可以作为与 smol_db_server 的接口使用。

目前使用此数据库的程序

  • cr_tiler_rs 使用此数据库存储游戏服务的排行榜信息。
  • 如果您使用此数据库,请随时告诉我,我会很高兴知道! :)

使用 smol_db 的原因

  • 您想使用更简约的数据库程序
  • 您就是我,喜欢使用自己制作的软件
  • 您需要一个没有特定于操作系统服务的数据库程序,并且具有最小的设置要求
  • 您想为仓库做出贡献
  • 您认为程序艺术很可爱。 Crisis

显著功能

  • 设置服务器和数据库都非常简单(无需处理奇怪的路径问题或其他常见烦恼)
  • 简单的客户端库,便于程序集成
  • 大多数 易于阅读的代码,便于添加其他功能
  • 查看/编辑客户端,可快速查看数据库概览
  • 可选 RSA-2048 位数据包加密
  • 在客户端任何交互后,数据库将在内存中存储一段时间

安全

smol_db 并未设计为极端安全,其大部分用例存在于本地网络中,那里安全性不那么必要。

虽然该程序支持选择性的数据包加密,但我仍然不建议将其用于任何需要高安全性的应用。

如果我想到了任何可以提高安全性的改进,我会在我有空时慢慢实现它们。访问密钥不以散列或加密格式存储,因此不应假设存储时是安全或可靠的。

示例 Docker-Compose 入口

db:
    build: https://github.com/CoryRobertson/smol_db.git#main
    image: smol_db_server
    ports:
      - "8222:8222"
    container_name: "smol_db_server_instance1"
    restart: unless-stopped
    volumes:
      - "./smol_db:/data"

设置

要创建 smol_db_server 实例,可以使用上面的 docker compose 示例,或者从源代码构建服务器包并在服务器计算机上运行。在裸机或 Docker 容器上创建服务器实例后,只需使用 smol_db_client 库或通过 smol_db_viewer 连接到它。下方的图像展示了 smol_db_viewer 的外观和可用的屏幕。

客户端库的示例用法

use smol_db_client::SmolDbClient;
fn main() {
    // server is assumed to be running on localhost on port 8222
    let mut client = SmolDbClient::new("localhost:8222").unwrap();
    let data = "super cool user data";
    
    let _ = client.set_access_key("readme_db_key".to_string()).unwrap();
    let _ = client.create_db("cool_db_name", DBSettings::default()).unwrap();
    let _ = client.write_db("cool_db_name", "cool_data_location", data).unwrap();

    match client.read_db("cool_db_name","cool_data_location") {
        SuccessReply(response_data) => {
            assert_eq!(&response_data, data);
        }
        SuccessNoData => {
            assert!(false);
        }
    }
}

图像

连接

Image of connecting to a database using the viewing application

设置客户端访问密钥

Image of setting the key of the client in the viewing application

创建数据库

Image of creating a database using the viewing application

查看数据库中的数据,并编辑数据

Image of viewing the data on the database, and also writing to it, using the viewing application

更改数据库的设置

Image of changing the database settings using the viewing application

依赖关系

~17–54MB
~1M SLoC