SuperAPI AI 工具集

subsystem-summary-of-database

数据与分析

查看项目

更新于 10-16 06:39

技能介绍

用途

本技能用于获取 stellar-core 数据库子系统的精简技术摘要,帮助开发者在不阅读完整源码的情况下快速理解该持久化层的结构、关键类、迁移逻辑与线程模型。

主要能力

该摘要覆盖以下内容:

  • 整体架构:数据库子系统封装 SOCI C++ 数据库访问库,管理 SQLite 或 PostgreSQL 后端连接,处理模式版本与迁移、工作线程连接池、指标采集,以及 SQLite 下的主库与杂项库(misc)双库架构。
  • 关键文件:Database.h/.cpp(核心类)、DatabaseTypeSpecificOperation.h(后端特定代码的访问者模式)、DatabaseConnectionString.h/.cpp(日志中隐藏密码)、DatabaseUtils.h/.cpp(批量删除旧账本条目)。
  • 关键类与数据结构:Database(每个 Application 一个实例,持有全部连接)、SessionWrapper(soci::session 的 RAII 包装)、StatementContext(预编译语句的 RAII 句柄)、DatabaseTypeSpecificOperation<T>(后端特定操作的访问者/策略模式)、DatabaseConfigureSessionOp(连接建立时的配置操作)。
  • 模式版本管理:主库模式(MIN_SCHEMA_VERSION=25,SCHEMA_VERSION=26)与杂项库模式(MIN_MISC_SCHEMA_VERSION=0,MISC_SCHEMA_VERSION=1)两条独立版本轨道,以及各版本间的增量迁移内容。
  • 双库架构:SQLite 写操作会锁定整个数据库文件,因此将账本状态(主库)与共识/覆盖网络数据(杂项库)拆分到两个文件,以降低写锁竞争。仅适用于磁盘 SQLite;PostgreSQL 原生支持并发写,使用单一数据库。
  • 连接池:惰性创建,池大小为硬件并发线程数;若启用杂项库则每个池各占一半(最少 1)。主线程直接访问会话,工作线程必须使用连接池。
  • 关键函数:Database 公开 API(open、initialize、upgradeToCurrentSchema、getPreparedStatement、各类计时器、getSession/getMiscSession、getPool/getMiscPool 等)、自由函数(doDatabaseTypeSpecificOperation、decodeOpaqueXDR、removePasswordFromConnectionString、dropMiscTablesFromMain、validateVersion)以及 DatabaseUtils 命名空间(deleteOldEntriesHelper)。
  • 常量:包括模式版本、最低 SQLite 版本(3.45)、最低 PostgreSQL 版本(9.5)等。
  • 线程模型:主线程拥有主/杂项会话并执行所有写操作;工作线程通过连接池进行只读访问;SQLite 使用 WAL 模式配合双库拆分;PostgreSQL 使用 SERIALIZABLE 隔离级别。

使用方式

该技能以技术摘要形式提供,供阅读参考。资料未提供具体的调用命令或安装步骤。

适用场景

  • 需要快速了解 stellar-core 数据库子系统的开发者。
  • 排查模式迁移、连接管理或写锁竞争相关问题。
  • 在修改数据库相关代码前建立整体认知。

限制

  • 该摘要仅覆盖数据库子系统,不涉及 stellar-core 其他部分。
  • 双库架构仅适用于磁盘 SQLite,不适用于内存 SQLite 或 PostgreSQL。
  • 资料未提供收费、价格、平台或效果等信息。