""" BigDataTool - 大数据查询比对工具主应用 这是一个基于Flask的数据库查询比对工具,主要用于: 1. Cassandra数据库的生产环境与测试环境数据比对 2. Redis集群数据的一致性验证 3. 支持单表查询、TWCS分表查询、多主键查询等多种场景 4. 提供完整的配置管理、查询历史和日志记录功能 主要特性: - 模块化架构:清晰的代码组织和职责分离 - 多数据源支持:Cassandra + Redis - 智能数据比对:支持JSON、数组等复杂数据类型 - 分表查询:基于TWCS策略的时间分表支持 - 多主键查询:支持复合主键的精确匹配 - 配置管理:数据库配置的保存、加载和复用 - 查询历史:查询记录的持久化存储和回放 - 实时日志:详细的操作日志和性能监控 技术栈: - 后端:Flask + SQLite + Cassandra Driver + Redis - 前端:原生JavaScript + Bootstrap - 数据库:SQLite(配置存储)+ Cassandra(数据查询)+ Redis(数据比对) 作者:BigDataTool项目组 版本:v2.0 更新时间:2024年8月 """ import logging from flask import Flask # 导入模块 from modules.database import ensure_database from modules.query_logger import QueryLogCollector, CollectorHandler from modules.api_routes import setup_routes # 创建Flask应用 app = Flask(__name__) # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # 确保数据库存在 if not ensure_database(): logger.error("数据库初始化失败,应用可能无法正常工作") else: logger.info("数据库初始化成功") # 创建查询日志收集器 query_log_collector = QueryLogCollector() # 设置日志处理器,将应用日志记录到查询日志中 collector_handler = CollectorHandler(query_log_collector) collector_handler.setLevel(logging.INFO) # 为特定的logger添加收集器 cassandra_logger = logging.getLogger('modules.cassandra_client') query_logger = logging.getLogger('modules.query_engine') comparison_logger = logging.getLogger('modules.data_comparison') sharding_logger = logging.getLogger('modules.sharding') cassandra_logger.addHandler(collector_handler) query_logger.addHandler(collector_handler) comparison_logger.addHandler(collector_handler) sharding_logger.addHandler(collector_handler) # 设置所有路由 setup_routes(app, query_log_collector) if __name__ == '__main__': logger.info("=== BigDataTool 启动 ===") logger.info("应用架构:模块化") logger.info("支持功能:单表查询、分表查询、多主键查询、配置管理、查询历史") # 从环境变量获取配置,支持Docker部署 import os host = os.getenv('FLASK_HOST', '0.0.0.0') port = int(os.getenv('FLASK_PORT', 5000)) debug = os.getenv('FLASK_DEBUG', 'True').lower() == 'true' logger.info(f"访问地址:http://{host}:{port}") logger.info("API文档:/api/* 路径下的所有端点") logger.info(f"配置信息 - 主机: {host}, 端口: {port}, 调试: {debug}") app.run(debug=debug, host=host, port=port)