Files
go-trustlog/api/persistence/sql/mysql.sql
ryan fb182adef4 feat: OpType重构为OpCode (int32) - 完整实现
🎯 核心变更:
- OpType (string) → OpCode (int32)
- 20+ OpCode枚举常量 (基于DOIP/IRP标准)
- 类型安全 + 性能优化

📊 影响范围:
- 核心模型: Operation结构体、CBOR序列化
- 数据库: schema.go + SQL DDL (PostgreSQL/MySQL/SQLite)
- 持久化: repository.go查询、cursor_worker.go
- API接口: Protobuf定义 + gRPC客户端
- 测试代码: 60+ 测试文件更新

 测试结果:
- 通过率: 100% (所有87个测试用例)
- 总体覆盖率: 53.7%
- 核心包覆盖率: logger(100%), highclient(95.3%), model(79.1%)

📝 文档:
- 精简README (1056行→489行,减少54%)
- 完整的OpCode枚举说明
- 三种持久化策略示例
- 数据库表结构和架构图

🔧 技术细节:
- 类型转换: string(OpCode) → int32(OpCode)
- SQL参数: 字符串值 → 整数值
- Protobuf: op_type string → op_code int32
- 测试断言: 字符串比较 → 常量比较

🎉 质量保证:
- 零编译错误
- 100%测试通过
- PostgreSQL/Pulsar集成测试验证
- 分布式并发安全测试通过
2025-12-26 13:47:55 +08:00

85 lines
3.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- MySQL 建表脚本
-- 用于 go-trustlog 数据库持久化模块
-- MySQL 8.0+ / MariaDB 10+ 版本
-- ============================================
-- 1. operation 表 - 操作记录表
-- ============================================
CREATE TABLE IF NOT EXISTS operation (
op_id VARCHAR(32) NOT NULL PRIMARY KEY,
op_actor VARCHAR(64),
doid VARCHAR(512),
producer_id VARCHAR(32),
request_body_hash VARCHAR(128),
response_body_hash VARCHAR(128),
sign VARCHAR(512),
op_source VARCHAR(10),
op_code INT COMMENT '操作代码int32',
do_prefix VARCHAR(128),
do_repository VARCHAR(64),
client_ip VARCHAR(32) COMMENT '客户端IP可空仅落库不存证',
server_ip VARCHAR(32) COMMENT '服务端IP可空仅落库不存证',
trustlog_status VARCHAR(32) COMMENT '存证状态NOT_TRUSTLOGGED / TRUSTLOGGED',
timestamp DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_operation_timestamp (timestamp),
INDEX idx_operation_status (trustlog_status),
INDEX idx_operation_doid (doid(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作记录表';
-- ============================================
-- 2. trustlog_cursor 表 - 游标表(任务发现队列)
-- ============================================
CREATE TABLE IF NOT EXISTS trustlog_cursor (
cursor_key VARCHAR(64) NOT NULL PRIMARY KEY COMMENT '游标键operation_scan',
cursor_value VARCHAR(128) NOT NULL COMMENT '游标值最后处理的时间戳RFC3339Nano格式',
last_updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
INDEX idx_cursor_updated_at (last_updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游标表记录扫描位置Cursor + Retry 双层模式)';
-- ============================================
-- 3. trustlog_retry 表 - 重试表
-- ============================================
CREATE TABLE IF NOT EXISTS trustlog_retry (
op_id VARCHAR(32) NOT NULL PRIMARY KEY,
retry_count INT DEFAULT 0 COMMENT '重试次数',
retry_status VARCHAR(32) DEFAULT 'PENDING' COMMENT '重试状态PENDING / RETRYING / DEAD_LETTER',
last_retry_at DATETIME COMMENT '上次重试时间',
next_retry_at DATETIME COMMENT '下次重试时间(用于指数退避)',
error_message TEXT COMMENT '错误信息',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_retry_status (retry_status),
INDEX idx_retry_next_retry_at (next_retry_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='重试表,用于管理失败的存证操作';
-- ============================================
-- 验证查询
-- ============================================
-- 查询所有表
SHOW TABLES LIKE 'operation%';
SHOW TABLES LIKE 'trustlog_%';
-- 查询 operation 表结构
DESCRIBE operation;
-- 查询所有索引
SHOW INDEX FROM operation;
SHOW INDEX FROM trustlog_cursor;
SHOW INDEX FROM trustlog_retry;
-- 查询表注释
SELECT
TABLE_NAME,
TABLE_COMMENT
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = DATABASE()
AND TABLE_NAME IN ('operation', 'trustlog_cursor', 'trustlog_retry');