概览
Shannon 使用 PostgreSQL 进行持久化存储。数据库组织为两个模式:auth: 认证、多租户、API 密钥和安全审计日志。public: 核心应用数据,包括任务、会话和使用指标。
实体关系图
模式: auth (认证与多租户)
auth.tenants
用途: 多租户组织管理
索引:
idx_tenants_slugON (slug)
auth.users
用途: 用户认证和个人资料管理
索引:
idx_users_emailON (email)idx_users_tenant_idON (tenant_id)
auth.api_keys
用途: 编程访问的 API 密钥管理
索引:
idx_api_keys_key_hashON (key_hash)idx_api_keys_user_idON (user_id)
workflows:read: 允许读取工作流/任务状态和结果workflows:write: 允许提交和管理工作流/任务agents:execute: 允许执行代理
auth.refresh_tokens
用途: JWT 刷新令牌存储和撤销
索引:
idx_refresh_tokens_token_hashON (token_hash)idx_refresh_tokens_user_idON (user_id)idx_refresh_tokens_expires_atON (expires_at)
auth.audit_logs
用途: 安全事件审计跟踪
索引:
idx_audit_logs_event_typeON (event_type)idx_audit_logs_user_idON (user_id)idx_audit_logs_tenant_idON (tenant_id)idx_audit_logs_created_atON (created_at)
login_success: 用户成功登录login_failed: 用户登录失败password_change: 密码已更改api_key_created: API 密钥已创建
模式: public (核心应用)
users
用途: 应用用户配置文件(旧版,关联到 auth.users)
索引:
idx_users_tenant_idON (tenant_id)idx_users_external_idON (external_id)
auth.users。
sessions
用途: 用户会话管理和上下文
索引:
idx_sessions_user_idON (user_id)idx_sessions_tenant_idON (tenant_id)idx_sessions_expires_atON (expires_at)idx_sessions_external_idON ((context->>‘external_id’)) WHERE context->>‘external_id’ IS NOT NULLidx_sessions_user_external_idUNIQUE ON (user_id, (context->>‘external_id’)) WHERE context->>‘external_id’ IS NOT NULL AND deleted_at IS NULLidx_sessions_not_deletedON (id) WHERE deleted_at IS NULL
context->>'external_id',用于双 ID 查询。
示例:
task_executions
用途: 任务/工作流执行历史和指标
索引:
idx_task_executions_workflow_idON (workflow_id)idx_task_executions_user_idON (user_id)idx_task_executions_session_idON (session_id)idx_task_executions_statusON (status)idx_task_executions_started_atON (started_at)idx_task_executions_tenant_id_started_atON (tenant_id, started_at)
PENDING: 任务已创建但尚未开始RUNNING: 任务正在进行中COMPLETED: 任务成功完成FAILED: 任务失败
agent_executions
用途: 任务中的单个代理执行详情
索引:
idx_agent_executions_workflow_idON (workflow_id)idx_agent_executions_created_atON (created_at DESC)idx_agent_executions_stateON (state)
IDLE- 代理空闲ANALYZING- 分析输入PLANNING- 规划执行RETRIEVING- 检索信息EXECUTING- 执行任务VALIDATING- 验证结果SYNTHESIZING- 合成响应COMPLETED- 执行完成FAILED- 执行失败
tool_executions
用途: 工具调用历史和性能
索引:
idx_tool_executions_workflow_idON (workflow_id)idx_tool_executions_tool_nameON (tool_name)idx_tool_executions_created_atON (created_at DESC)idx_tool_executions_successON (success)
event_logs
用途: 流式事件存储,用于审计和重放
索引:
idx_event_logs_workflow_idON (workflow_id)idx_event_logs_task_idON (task_id)idx_event_logs_typeON (type)idx_event_logs_agent_idON (agent_id)idx_event_logs_timestampON (timestamp)idx_event_logs_stream_idON (stream_id)idx_event_logs_payload_ginUSING GIN (payload)
task_startedagent_startedtool_invokedtask_completed
token_usage
用途: 每个任务的详细 token 使用跟踪
索引:
idx_token_usage_user_idON (user_id)idx_token_usage_task_idON (task_id)idx_token_usage_provider_modelON (provider, model)idx_token_usage_created_atON (created_at)
usage_daily_aggregates
用途: 预计算的每日使用统计
索引:
idx_usage_daily_aggregates_user_dateUNIQUE ON (user_id, date)idx_usage_daily_aggregates_dateON (date)
其他表
tool_calls
用途: 旧版工具调用跟踪(请改用 tool_executions)prompts
用途: 提示词版本控制和 A/B 测试learning_cases
用途: 强化学习案例存储session_archives
用途: 来自 Redis 的长期会话快照audit_logs (public)
用途: 应用审计跟踪(与 auth.audit_logs 分开)数据库函数
update_updated_at_column()
用途: 行更改时自动更新updated_at
使用: 作为触发器附加到 users 和 sessions 表
update_daily_aggregate(user_id, date)
用途: 更新或创建用户的每日使用聚合 使用: 任务完成时通过触发器自动调用trigger_update_daily_aggregate()
用途: 在任务状态更改时更新聚合的触发器函数 使用: 在 task_executions INSERT/UPDATE 时自动触发示例查询
任务分析
成本分析
性能监控
最佳实践
1. 索引
始终为以下内容使用索引:- 外键 (
user_id,tenant_id等) - WHERE 子句中使用的高基数列 (
status,mode)。 - 时间序列数据 (
created_at,started_at)。 - 使用 GIN 索引的 JSONB 列。
2. 分区
对于高容量表,考虑分区:3. 数据保留
推荐策略:event_logs: 保留 90 天。task_executions: 保留 1 年,归档旧记录。audit_logs: 保留 2 年。refresh_tokens: 每周清除过期/已撤销的令牌。
4. 查询优化
使用 EXPLAIN ANALYZE:5. 连接池
配置(Shannon 中已配置):维护
Vacuum 和 Analyze
统计信息
相关文档
环境变量
数据库配置
性能调优
查询优化
监控
数据库监控