Files
BigDataTool/app.py
2025-08-11 09:34:29 +08:00

90 lines
3.1 KiB
Python
Raw Permalink 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.

"""
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)