Files
BigDataTool/CLAUDE.md
2025-08-02 01:23:33 +08:00

10 KiB
Raw Blame History

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

项目架构

这是一个基于 Flask 的数据库查询比对工具,用于比较 Cassandra 数据库中生产环境和测试环境的数据差异。现已支持单表查询和TWCS分表查询两种模式。

核心组件架构

后端 (Flask)

  • app.py: 主应用文件包含所有API端点和数据处理逻辑
    • 数据库连接管理Cassandra + SQLite
    • 查询执行和结果比对算法
    • 配置组管理CRUD操作
    • JSON字段特殊处理和数组比较逻辑
    • 查询历史记录管理
    • 分表查询功能(新增)
      • ShardingCalculatorTWCS时间分表计算器
      • execute_sharding_query():分表查询执行
      • execute_mixed_query():混合查询支持(生产分表+测试单表组合)
      • /api/sharding-query分表查询API端点
  • config_groups.db: SQLite数据库存储用户保存的配置组、查询历史和分表配置

前端 (原生JavaScript + Bootstrap)

  • templates/db_compare.html: 主界面模板,现已支持单表和分表双模式
    • 分表模式切换开关
    • 生产/测试环境独立分表配置
    • 分表参数配置(时间间隔、分表数量)
    • 分表查询信息展示
  • templates/index.html: 工具集合首页
  • static/js/app.js: 核心前端逻辑
    • 配置管理和表单处理
    • 差异结果的分页展示系统
    • 原生数据展示(多种视图模式:格式化、原始、差异对比、树形)
    • 高级错误处理和用户反馈
    • 分表查询支持(新增)
      • toggleShardingMode():分表模式切换
      • getShardingConfig():分表配置获取
      • displayShardingInfo():分表查询结果展示

分表查询功能模块(重要新增)

  • 时间戳提取算法(已更新)
    • 新规则:使用 re.sub(r'\D', '', key) 删除Key中所有非数字字符
    • 将提取到的数字字符串转换为整数作为时间戳
    • 支持任意格式的Key只要包含数字即可
    • 示例:wmid_16094592001609459200abc123def456123456
  • 分表索引计算
    • 公式:int(numbers) // interval_seconds % table_count
    • 默认配置604800秒间隔7天14张分表
    • 支持自定义配置
  • 混合查询场景
    • 生产环境分表 + 测试环境单表
    • 生产环境分表 + 测试环境分表
    • 生产环境单表 + 测试环境分表
    • 生产环境单表 + 测试环境单表

示例代码

  • demo/Query.py: 独立的Cassandra查询比对脚本示例
  • demo/twcsQuery.py: 另一个查询示例
  • demo/CalculationLibrary.py: 分表计算逻辑参考实现
  • test_sharding.py: 分表功能测试脚本

关键功能模块

数据比对引擎

  • 支持复杂JSON字段的深度比较
  • 数组字段的顺序无关比较
  • 字段级别的差异统计和分析
  • 数据质量评估和建议生成
  • 支持包含和排除特定字段的比较

用户界面特性

  • 分页系统(差异记录和相同记录)
  • 实时搜索和过滤
  • 原生数据展示JSON语法高亮、树形视图
  • 配置导入导出和管理
  • 详细的错误诊断和故障排查指南
  • 查询历史记录和复用
  • 查询日志系统(新增)
    • 实时显示SQL执行日志
    • 支持日志级别过滤INFO/WARNING/ERROR
    • SQL语句语法高亮显示
    • 执行时间和记录数统计
    • 日志清空和刷新功能

开发相关命令

环境设置

# 安装依赖仅需要Flask和cassandra-driver
pip install -r requirements.txt

# 运行应用默认端口5000
python app.py

# 自定义端口运行
# 修改app.py最后一行app.run(debug=True, port=5001)

测试和验证

# 运行分表功能测试(测试时间戳提取和分表索引计算)
python test_sharding.py

# 测试新的分表计算规则
python test_new_sharding.py

# 演示新分表规则的详细工作原理
python demo_new_sharding.py

# 测试查询日志功能
python test_query_logs.py

# 集成测试(分表功能 + 查询日志)
python test_integration.py

# 测试数据库连接和查询功能
# 通过Web界面http://localhost:5000/db-compare
# 或直接运行示例脚本:
python demo/Query.py
python demo/twcsQuery.py

开发模式

应用默认运行在debug模式代码修改后自动重启。访问

依赖项

  • Flask==2.3.3
  • cassandra-driver==3.29.1

API架构说明

核心API端点

  • GET /api/default-config: 获取默认数据库配置
  • POST /api/query: 执行单表数据库查询比对(原有功能)
  • POST /api/sharding-query: 执行分表查询比对(新增功能)
  • GET /api/config-groups: 获取所有配置组
  • POST /api/config-groups: 创建新配置组
  • GET /api/config-groups/<id>: 获取特定配置组
  • DELETE /api/config-groups/<id>: 删除配置组
  • POST /api/init-db: 初始化SQLite数据库
  • GET /api/query-history: 获取查询历史
  • POST /api/query-history: 保存查询历史
  • GET /api/query-history/<id>: 获取特定历史记录
  • DELETE /api/query-history/<id>: 删除历史记录
  • GET /api/query-logs: 获取查询日志支持limit参数
  • DELETE /api/query-logs: 清空查询日志

查询比对流程

单表查询流程(/api/query

  1. 前端发送配置和Key值列表到 /api/query
  2. 后端创建两个Cassandra连接生产+测试)
  3. 并行执行查询,获取原始数据
  4. 运行比较算法,生成差异报告
  5. 返回完整结果(差异、统计、原始数据)

分表查询流程(/api/sharding-query

  1. 前端发送配置、Key值列表和分表配置到 /api/sharding-query
  2. 后端使用 ShardingCalculator 解析Key中的时间戳
  3. 根据分表算法计算每个Key对应的分表名称
  4. 创建分表映射关系,并行执行分表查询
  5. 汇总所有分表结果,执行比较算法
  6. 返回包含分表信息的完整结果

数据结构和配置

数据库配置结构

单表查询配置

{
  pro_config: {
    cluster_name, datacenter, hosts[], port, 
    username, password, keyspace, table
  },
  test_config: { /* 同上 */ },
  keys: ["主键字段名"],
  fields_to_compare: ["字段1", "字段2"], // 空数组=全部字段
  exclude_fields: ["排除字段"],
  values: ["key1", "key2", "key3"] // 要查询的Key值
}

分表查询配置

{
  pro_config: { /* 基础配置同上 */ },
  test_config: { /* 基础配置同上 */ },
  keys: ["主键字段名"],
  fields_to_compare: ["字段1", "字段2"],
  exclude_fields: ["排除字段"],
  values: ["key1", "key2", "key3"],
  sharding_config: {
    use_sharding_for_pro: true,    // 生产环境是否使用分表
    use_sharding_for_test: false,  // 测试环境是否使用分表
    interval_seconds: 604800,      // 分表时间间隔默认7天
    table_count: 14               // 分表数量默认14张表
  }
}

查询结果结构

{
  total_keys, pro_count, test_count,
  differences: [{ key, field, pro_value, test_value, message }],
  identical_results: [{ key, pro_fields, test_fields }],
  field_diff_count: { "field_name": count },
  raw_pro_data: [], raw_test_data: [],
  summary: { overview, percentages, field_analysis, recommendations },
  
  // 分表查询特有字段
  sharding_info: {
    pro_shard_mapping: { "key1": "table_name_0", "key2": "table_name_1" },
    test_shard_mapping: { /* 同上 */ },
    failed_keys: [], // 时间戳提取失败的Key
    shard_stats: {
      pro_tables_used: ["table_0", "table_1"],
      test_tables_used: ["table_0"],
      timestamp_extraction_success_rate: 95.5
    }
  }
}

开发注意事项

分表功能开发指导

  • 时间戳解析(已更新)ShardingCalculator.extract_timestamp_from_key() 新规则
    • 使用 re.sub(r'\D', '', key) 删除所有非数字字符
    • 将提取的数字字符串转换为整数作为时间戳
    • 不再进行时间戳有效性验证,支持任意数字组合
  • 分表索引计算:使用公式 int(numbers) // interval_seconds % table_count
  • 错误处理Key中没有数字字符时会记录到 failed_keys
  • 混合查询:支持生产环境分表+测试环境单表的组合场景
  • 前端状态:分表模式通过 toggleShardingMode() 切换影响UI和提示文本

Cassandra连接处理

  • 连接包含详细的错误诊断和重试机制
  • 使用DCAwareRoundRobinPolicy避免负载均衡警告
  • 连接超时设置为10秒
  • 失败时提供网络连通性测试
  • 支持认证PlainTextAuthProvider
  • 支持集群配置cluster_name, datacenter

前端状态管理

  • currentResults: 存储最新查询结果
  • 分页状态:currentIdenticalPage, currentDifferencePage
  • 过滤状态:filteredIdenticalResults, filteredDifferenceResults
  • 日志状态(新增)allQueryLogs - 存储所有查询日志

JSON和数组字段处理

  • normalize_json_string(): 标准化JSON字符串用于比较
  • compare_array_values(): 数组的顺序无关比较
  • is_json_field(): 智能检测JSON字段
  • 前端提供专门的JSON语法高亮和树形展示

错误处理策略

  • 后端分类错误connection_error, validation_error, query_error, system_error
  • 前端:详细错误展示,包含配置信息、解决建议、连接测试工具
  • 提供交互式故障排查指南
  • 查询日志(新增)所有SQL执行和错误信息都会记录到查询日志中

性能考虑

  • 大数据集的分页处理
  • 原生数据的延迟加载
  • JSON格式化的客户端缓存
  • 搜索和过滤的防抖处理

SQLite数据库表结构

config_groups表

  • id: 主键
  • name: 配置组名称(唯一)
  • description: 描述
  • pro_config: 生产环境配置JSON
  • test_config: 测试环境配置JSON
  • query_config: 查询配置JSON
  • sharding_config: 分表配置JSON新增字段
  • created_at/updated_at: 时间戳

query_history表

  • id: 主键
  • name: 查询名称
  • description: 描述
  • pro_config/test_config/query_config: 配置JSON
  • query_keys: 查询的键值JSON
  • results_summary: 结果摘要JSON
  • execution_time: 执行时间
  • total_keys/differences_count/identical_count: 统计数据
  • created_at: 时间戳