# 《WaLiAPI - 本地 LLM API 网关》第1-2节:数据库设计与初始化

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

上一节我们完成了 WaLiAPI 项目的初始化工程搭建。这一节我们来设计和实现数据库层——这是整个网关的数据基石,渠道配置、API 密钥、请求日志都存储在这里。

# 一、本章诉求

  1. 设计数据库表结构(channels、api_keys、request_logs)
  2. 编写 SQL migration 迁移脚本
  3. 使用 sqlx 建立 SQLite 连接池
  4. 定义 Rust 数据模型(Channel、ApiKey、RequestLog)
  5. 实现 Repository 数据访问层
  6. 实现工具模块(ID 生成、时间格式化)

# 二、技术选型说明

# 2.1 为什么是 SQLite?

WaLiAPI 是一个本地桌面应用,数据库的选择有几个候选:

方案 优点 缺点
SQLite 零配置、单文件、随应用分发、性能好 不适合多进程并发写
JSON 文件 简单 无索引、查询困难、无事务
嵌入式 RocksDB 性能极高 编译慢、二进制体积大

对于桌面应用来说,SQLite 是最优解:零配置、单文件存储在应用数据目录、支持 SQL 查询和索引、有成熟的迁移机制。

# 2.2 为什么是 sqlx?

Rust 生态中操作 SQLite 的库主要有两个:

  • rusqlite:同步 API,简单直接,但在 async 环境中会阻塞线程
  • sqlx:异步 API,编译时检查 SQL,支持连接池,与 Tokio 深度集成

我们使用 sqlx + runtime-tokio,配合 SqlitePoolOptions 建立连接池。