优化项目整合内容

This commit is contained in:
2025-08-05 11:23:49 +08:00
parent 701a9a552e
commit 3f78ce7365
15 changed files with 898 additions and 2977 deletions

View File

@@ -1,6 +1,36 @@
"""
数据库管理模块
负责SQLite数据库的初始化、连接和表结构管理
==============
本模块负责BigDataTool项目的SQLite数据库管理包括
核心功能:
1. 数据库初始化和表结构创建
2. 数据库连接管理和事务处理
3. 表结构版本控制和字段动态添加
4. 数据库完整性检查和自动修复
数据表结构:
- config_groups: 配置组管理Cassandra/Redis连接配置
- query_history: 查询历史记录(单表/分表/Redis查询
- sharding_config_groups: 分表配置组TWCS分表参数
- query_logs: 查询日志(实时操作日志和性能监控)
- redis_config_groups: Redis配置组集群连接配置
- redis_query_history: Redis查询历史Redis数据比对记录
设计特点:
- 自动化表结构管理:支持字段动态添加和版本升级
- 向后兼容性:确保旧版本数据的正常访问
- 错误恢复:数据库损坏时自动重建表结构
- 索引优化:为查询性能优化的索引设计
使用方式:
- ensure_database(): 确保数据库和表结构存在
- get_db_connection(): 获取标准的数据库连接
- init_database(): 手动初始化数据库(通常自动调用)
作者BigDataTool项目组
更新时间2024年8月
"""
import sqlite3
@@ -14,7 +44,27 @@ logger = logging.getLogger(__name__)
DATABASE_PATH = 'config_groups.db'
def init_database():
"""初始化数据库"""
"""
初始化SQLite数据库和所有必要的表结构
创建以下数据表:
1. config_groups - Cassandra配置组存储
2. query_history - 查询历史记录存储
3. sharding_config_groups - 分表配置组存储
4. query_logs - 查询日志存储
5. redis_config_groups - Redis配置组存储
6. redis_query_history - Redis查询历史存储
同时创建必要的索引以优化查询性能。
Returns:
bool: 初始化成功返回True失败返回False
注意:
- 使用IF NOT EXISTS确保重复调用安全
- 自动创建性能优化索引
- 支持外键约束和级联删除
"""
try:
conn = sqlite3.connect(DATABASE_PATH)
cursor = conn.cursor()
@@ -135,7 +185,28 @@ def init_database():
return False
def ensure_database():
"""确保数据库和表存在"""
"""
确保数据库文件和表结构完整存在
执行以下检查和操作:
1. 检查数据库文件是否存在,不存在则创建
2. 验证所有必要表是否存在,缺失则重建
3. 检查表结构是否完整,缺少字段则动态添加
4. 确保索引完整性
支持的表结构升级:
- config_groups表添加sharding_config字段
- query_history表添加sharding_config、query_type、raw_results等字段
- query_logs表添加history_id外键字段
Returns:
bool: 数据库就绪返回True初始化失败返回False
特性:
- 向后兼容:支持从旧版本数据库升级
- 自动修复:检测到问题时自动重建
- 零停机:升级过程不影响现有数据
"""
if not os.path.exists(DATABASE_PATH):
logger.info("数据库文件不存在,正在创建...")
return init_database()
@@ -222,7 +293,26 @@ def ensure_database():
return init_database()
def get_db_connection():
"""获取数据库连接"""
"""
获取配置好的SQLite数据库连接
返回一个配置了Row工厂的数据库连接支持
- 字典式访问查询结果row['column_name']
- 自动类型转换
- 标准的SQLite连接功能
Returns:
sqlite3.Connection: 配置好的数据库连接对象
使用示例:
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM config_groups")
rows = cursor.fetchall()
for row in rows:
print(row['name']) # 字典式访问
conn.close()
"""
conn = sqlite3.connect(DATABASE_PATH)
conn.row_factory = sqlite3.Row
return conn