Skip to content

数据库

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,不可配置。