90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
"""
|
||
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) |