优化项目整合内容
This commit is contained in:
@@ -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
|
Reference in New Issue
Block a user