architecturesqlitedatabasecppqt6 type: concept 创建: 2026-04-20 更新: 2026-04-20

Fincept Storage System (SQLite + Repository Pattern)

Overview

Fincept Terminal 使用 SQLite 作为本地持久化存储,采用 Repository 模式 + Migration 系统 + Cache 层 + SecureStorage 的四层架构。~75 个源文件覆盖完整的数据访问层。

Architecture Layers

┌─────────────────────────────────────────┐
│         StorageManager                   │  ← 统一入口,初始化所有子系统
├─────────────────────────────────────────┤
│  Repositories (17+ 实体仓库)             │  ← CRUD 操作,业务数据
│  BaseRepository.h (模板基类)            │
├─────────────────────────────────────────┤
│  CacheManager + TabSessionStore         │  ← 内存缓存 + 会话状态
├─────────────────────────────────────────┤
│  Database + CacheDatabase (SQLite)      │  ← 原生 SQLite 封装
│  MigrationRunner + v001~v018           │  ← 数据库迁移
├─────────────────────────────────────────┤
│  SecureStorage                          │  ← 敏感数据加密存储
└─────────────────────────────────────────┘

Database Layer

Database (主数据库)

  • Database::instance() — 单例模式
  • 自动创建数据库目录
  • 支持 WAL 模式 (Write-Ahead Logging)
  • 事务管理 (beginTransaction(), commit(), rollback())

CacheDatabase (缓存数据库)

  • 独立于主数据库
  • 用于 DataHub 的持久化缓存
  • 支持 TTL 过期自动清理

Migration System

18 个迁移版本 (v001_initial.cppv018_widget_config):

VersionContent
v001初始表结构 (accounts, settings, watchlists)
v002LLM 聊天 (chat_messages, llm_configs)
v003数据源 + MCP + Agent 配置
v004清理废弃表
v005Dashboard 布局
v006多 Portfolio 支持
v007News 基线数据
v008Workflows (工作流持久化)
v009Instruments (交易合约)
v010LLM Profiles
v011Custom Indices
v012数据标准化配置
v013News articles
v014LLM tools 开关
v015Screen state
v016Broker accounts
v017性能索引
v018Widget config

Repository Pattern

BaseRepository (模板基类)

template<typename T>
class BaseRepository {
    virtual Result<T> by_id(int id);
    virtual Result<QList<T>> all();
    virtual Result<void> insert(const T& item);
    virtual Result<void> update(const T& item);
    virtual Result<void> remove(int id);
};

17+ Repositories

RepositoryPurpose
AccountRepository用户账户
AgentConfigRepositoryAI Agent 配置
ChatRepositoryLLM 聊天历史
ContextRecordingRepository上下文录制
CustomIndexRepository自定义指数
DashboardLayoutRepositoryDashboard 布局
DataMappingRepository数据映射
DataSourceRepository数据源连接配置
LlmConfigRepositoryLLM Provider 配置
LlmProfileRepositoryLLM Profile
McpServerRepositoryMCP Server 配置
NewsArticleRepository新闻文章
NewsMonitorRepository新闻监控
NotesRepository用户笔记
PaperTradingRepository模拟交易
PortfolioHoldingsRepositoryPortfolio 持仓
PortfolioRepositoryPortfolio 定义
ReportRepository报告
SettingsRepository应用设置
WatchlistRepository关注列表
WorkflowRepository工作流定义

SecureStorage

  • 加密存储敏感数据 (API keys, credentials)
  • 平台原生加密:
    • Windows: DPAPI (CryptProtectData)
    • macOS: Keychain
    • Linux: libsecret / fallback

CacheManager + TabSessionStore

  • CacheManager: 内存缓存,支持 TTL
  • TabSessionStore: 保存标签页状态 (滚动位置、选中项等)

Design Decisions

  1. SQLite over embedded DB: 零依赖,跨平台,支持完整 SQL
  2. Repository pattern: 统一接口,易于测试和替换后端
  3. Migration system: 安全的 schema 演进
  4. Separate cache DB: 缓存数据可安全删除,不影响核心数据
  5. Platform-native encryption: 不自行实现加密算法
  6. WAL mode: 更好的并发性能