数据库
FoxCore 使用嵌入式数据库,零外部服务依赖。
技术选型
| 库 | 用途 | 说明 |
|---|---|---|
| SQLite(SeaORM) | 关系数据 | 消息记录、用户画像、情感状态 |
| Moka | 内存缓存 | 热数据缓存,带 TTL 自动过期 |
| LanceDB | 向量搜索 | 记忆系统的 embedding(计划中) |
| Grafeo | 图数据库 | 知识图谱、实体关系(计划中) |
存储隔离
- 核心数据:
data/foxcore.db— 插件只读,通过 API 查询 - 插件数据:
data/plugins/<name>.db— 每个插件独立 SQLite,自由读写 - 独立写锁,互不阻塞
使用方式
保存消息
rust
ctx.db_save_message(SaveMessageRequest {
adapter: "onebot".into(),
message_id: "12345".into(),
group_id: Some("67890".into()),
sender_id: "111".into(),
sender_name: "Alice".into(),
content: "hello".into(),
segments_json: "[]".into(),
timestamp: 1700000000,
}).await?;查询消息
rust
let resp = ctx.db_query_messages(QueryMessagesRequest {
group_id: Some("67890".into()),
sender_id: None,
limit: 20,
before_timestamp: None,
}).await?;缓存
rust
ctx.cache_set("key", "value", None).await?;
let val = ctx.cache_get("key").await?;配置
toml
[database.sqlite]
# 最大连接数
max_connections = 5
[database.cache]
# 最大缓存条目数
max_capacity = 10000
# 默认 TTL(秒)
ttl_secs = 300数据库文件固定在 data/foxcore.db,不可配置。