# 《WaLiAPI - 本地 LLM API 网关》第1-2节:数据库设计与初始化
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
上一节我们完成了 WaLiAPI 项目的初始化工程搭建。这一节我们来设计和实现数据库层——这是整个网关的数据基石,渠道配置、API 密钥、请求日志都存储在这里。
# 一、本章诉求
- 设计数据库表结构(channels、api_keys、request_logs)
- 编写 SQL migration 迁移脚本
- 使用 sqlx 建立 SQLite 连接池
- 定义 Rust 数据模型(Channel、ApiKey、RequestLog)
- 实现 Repository 数据访问层
- 实现工具模块(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 建立连接池。

