8 个稳定版本

1.5.0-beta.12024年4月17日
1.5.0-beta.02024年4月16日
1.4.0 2024年1月26日
1.3.1 2023年10月19日
1.2.1 2023年8月26日

#1800数据库接口

Download history 2/week @ 2024-05-18 4/week @ 2024-05-25 2/week @ 2024-06-01 97/week @ 2024-07-27 1/week @ 2024-08-03

98 每月下载量
用于 smol_db_viewer

GPL-3.0-only

160KB
2.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

依赖项

~9MB
~157K SLoC