9个版本 (稳定版)

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

#120 in 数据库接口

Download history 178/week @ 2024-04-16 7/week @ 2024-07-02 61/week @ 2024-07-30

61 每月下载量

GPL-3.0-only

135KB
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

依赖关系

~15–45MB
~726K SLoC