增加文档
This commit is contained in:
603
docs/database-design.md
Normal file
603
docs/database-design.md
Normal file
@@ -0,0 +1,603 @@
|
||||
# DataTools Pro 数据库设计文档
|
||||
|
||||
## 1. 数据库概述
|
||||
|
||||
### 1.1 数据库架构
|
||||
DataTools Pro采用多数据库架构,针对不同的数据存储需求选择最适合的数据库技术:
|
||||
|
||||
```
|
||||
数据库架构图:
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ DataTools Pro 数据库架构 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 应用层 (Application Layer) │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ Flask应用程序 │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 数据访问层 (Data Access Layer) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
|
||||
│ │ Cassandra │ │ Redis │ │ SQLite │ │
|
||||
│ │ Driver │ │ Client │ │ Driver │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 数据存储层 (Data Storage Layer) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
|
||||
│ │ Apache │ │ Redis │ │ SQLite │ │
|
||||
│ │ Cassandra │ │ Cluster │ │ 本地文件 │ │
|
||||
│ │ 集群 │ │ │ │ config_groups.db │ │
|
||||
│ │ (外部数据源) │ │ (外部数据源) │ │ (配置和历史数据) │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 1.2 数据库分类
|
||||
|
||||
#### 1.2.1 外部数据源
|
||||
- **Apache Cassandra**: 主要的数据比对源,存储业务数据
|
||||
- **Redis Cluster**: 缓存和高性能数据存储,支持多种数据类型
|
||||
|
||||
#### 1.2.2 内部存储
|
||||
- **SQLite**: 轻量级关系数据库,存储系统配置、查询历史和日志
|
||||
|
||||
### 1.3 设计原则
|
||||
- **数据隔离**: 不同类型数据使用不同的存储方案
|
||||
- **性能优化**: 根据访问模式选择合适的数据库
|
||||
- **易维护**: 简化数据库管理和备份恢复
|
||||
- **扩展性**: 支持数据量增长和功能扩展
|
||||
|
||||
## 2. SQLite数据库设计
|
||||
|
||||
### 2.1 数据库文件
|
||||
- **文件名**: `config_groups.db`
|
||||
- **位置**: 项目根目录
|
||||
- **编码**: UTF-8
|
||||
- **版本**: SQLite 3.x
|
||||
|
||||
### 2.2 表结构设计
|
||||
|
||||
#### 2.2.1 config_groups表 - 配置组管理
|
||||
```sql
|
||||
CREATE TABLE config_groups (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL UNIQUE, -- 配置组名称
|
||||
description TEXT, -- 描述信息
|
||||
pro_config TEXT NOT NULL, -- 生产环境配置(JSON)
|
||||
test_config TEXT NOT NULL, -- 测试环境配置(JSON)
|
||||
query_config TEXT NOT NULL, -- 查询配置(JSON)
|
||||
sharding_config TEXT, -- 分表配置(JSON)
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_config_groups_name ON config_groups(name);
|
||||
CREATE INDEX idx_config_groups_created_at ON config_groups(created_at);
|
||||
```
|
||||
|
||||
**字段详解**:
|
||||
- `id`: 主键,自增整数
|
||||
- `name`: 配置组名称,唯一索引
|
||||
- `description`: 配置组描述,可为空
|
||||
- `pro_config`: 生产环境Cassandra配置,JSON格式
|
||||
- `test_config`: 测试环境Cassandra配置,JSON格式
|
||||
- `query_config`: 查询参数配置,JSON格式
|
||||
- `sharding_config`: 分表查询配置,JSON格式
|
||||
- `created_at`: 创建时间
|
||||
- `updated_at`: 更新时间
|
||||
|
||||
**JSON配置示例**:
|
||||
```json
|
||||
{
|
||||
"pro_config": {
|
||||
"cluster_name": "production-cluster",
|
||||
"datacenter": "datacenter1",
|
||||
"hosts": ["10.0.1.100", "10.0.1.101"],
|
||||
"port": 9042,
|
||||
"username": "cassandra",
|
||||
"password": "encrypted_password",
|
||||
"keyspace": "production_ks",
|
||||
"table": "user_data"
|
||||
},
|
||||
"query_config": {
|
||||
"keys": ["user_id"],
|
||||
"fields_to_compare": ["name", "email", "status"],
|
||||
"exclude_fields": ["created_at", "updated_at"]
|
||||
},
|
||||
"sharding_config": {
|
||||
"use_sharding_for_pro": true,
|
||||
"use_sharding_for_test": false,
|
||||
"interval_seconds": 604800,
|
||||
"table_count": 14
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2.2 query_history表 - 查询历史记录
|
||||
```sql
|
||||
CREATE TABLE query_history (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL, -- 历史记录名称
|
||||
description TEXT, -- 描述信息
|
||||
pro_config TEXT NOT NULL, -- 生产环境配置(JSON)
|
||||
test_config TEXT NOT NULL, -- 测试环境配置(JSON)
|
||||
query_config TEXT NOT NULL, -- 查询配置(JSON)
|
||||
query_keys TEXT NOT NULL, -- 查询的键值(JSON Array)
|
||||
results_summary TEXT NOT NULL, -- 结果摘要(JSON)
|
||||
execution_time REAL NOT NULL, -- 执行时间(秒)
|
||||
total_keys INTEGER NOT NULL, -- 总Key数量
|
||||
differences_count INTEGER NOT NULL, -- 差异数量
|
||||
identical_count INTEGER NOT NULL, -- 相同数量
|
||||
query_type TEXT NOT NULL DEFAULT 'single', -- 查询类型(single/sharding)
|
||||
sharding_config TEXT, -- 分表配置(JSON)
|
||||
raw_results TEXT, -- 完整查询结果(JSON)
|
||||
differences_data TEXT, -- 差异详细数据(JSON)
|
||||
identical_data TEXT, -- 相同数据详情(JSON)
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_query_history_name ON query_history(name);
|
||||
CREATE INDEX idx_query_history_query_type ON query_history(query_type);
|
||||
CREATE INDEX idx_query_history_created_at ON query_history(created_at);
|
||||
CREATE INDEX idx_query_history_execution_time ON query_history(execution_time);
|
||||
```
|
||||
|
||||
**字段详解**:
|
||||
- `id`: 主键,自增整数
|
||||
- `name`: 历史记录名称
|
||||
- `description`: 历史记录描述
|
||||
- `pro_config`: 生产环境配置快照
|
||||
- `test_config`: 测试环境配置快照
|
||||
- `query_config`: 查询配置快照
|
||||
- `query_keys`: 查询的Key值列表
|
||||
- `results_summary`: 查询结果摘要统计
|
||||
- `execution_time`: 查询执行时间
|
||||
- `total_keys`: 查询的总Key数量
|
||||
- `differences_count`: 发现的差异数量
|
||||
- `identical_count`: 相同记录数量
|
||||
- `query_type`: 查询类型(single/sharding)
|
||||
- `sharding_config`: 分表配置(仅分表查询)
|
||||
- `raw_results`: 完整的查询结果数据
|
||||
- `differences_data`: 差异数据详情
|
||||
- `identical_data`: 相同数据详情
|
||||
- `created_at`: 创建时间
|
||||
|
||||
#### 2.2.3 query_logs表 - 查询日志记录
|
||||
```sql
|
||||
CREATE TABLE query_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
batch_id TEXT NOT NULL, -- 批次ID(UUID)
|
||||
history_id INTEGER, -- 关联历史记录ID
|
||||
timestamp DATETIME NOT NULL, -- 日志时间戳
|
||||
level TEXT NOT NULL, -- 日志级别(INFO/WARNING/ERROR)
|
||||
message TEXT NOT NULL, -- 日志消息
|
||||
query_type TEXT NOT NULL, -- 查询类型标识
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
FOREIGN KEY (history_id) REFERENCES query_history(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_query_logs_batch_id ON query_logs(batch_id);
|
||||
CREATE INDEX idx_query_logs_history_id ON query_logs(history_id);
|
||||
CREATE INDEX idx_query_logs_level ON query_logs(level);
|
||||
CREATE INDEX idx_query_logs_timestamp ON query_logs(timestamp);
|
||||
CREATE INDEX idx_query_logs_query_type ON query_logs(query_type);
|
||||
```
|
||||
|
||||
**字段详解**:
|
||||
- `id`: 主键,自增整数
|
||||
- `batch_id`: 批次标识,同一次查询操作的日志共享同一个batch_id
|
||||
- `history_id`: 关联的历史记录ID,外键关联
|
||||
- `timestamp`: 日志产生的精确时间戳
|
||||
- `level`: 日志级别(INFO/WARNING/ERROR)
|
||||
- `message`: 日志消息内容
|
||||
- `query_type`: 查询类型标识(cassandra_single/cassandra_sharding/redis_compare)
|
||||
- `created_at`: 记录创建时间
|
||||
|
||||
### 2.3 数据库触发器
|
||||
|
||||
#### 2.3.1 自动更新updated_at触发器
|
||||
```sql
|
||||
-- 配置组更新时间触发器
|
||||
CREATE TRIGGER update_config_groups_updated_at
|
||||
AFTER UPDATE ON config_groups
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE config_groups
|
||||
SET updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = NEW.id;
|
||||
END;
|
||||
```
|
||||
|
||||
### 2.4 数据库视图
|
||||
|
||||
#### 2.4.1 查询历史统计视图
|
||||
```sql
|
||||
CREATE VIEW query_history_stats AS
|
||||
SELECT
|
||||
query_type,
|
||||
COUNT(*) as total_queries,
|
||||
AVG(execution_time) as avg_execution_time,
|
||||
AVG(total_keys) as avg_keys_per_query,
|
||||
AVG(differences_count) as avg_differences,
|
||||
AVG(CAST(differences_count AS REAL) / total_keys * 100) as avg_diff_rate,
|
||||
MIN(created_at) as first_query,
|
||||
MAX(created_at) as last_query
|
||||
FROM query_history
|
||||
GROUP BY query_type;
|
||||
```
|
||||
|
||||
#### 2.4.2 日志统计视图
|
||||
```sql
|
||||
CREATE VIEW query_logs_stats AS
|
||||
SELECT
|
||||
DATE(created_at) as log_date,
|
||||
level,
|
||||
query_type,
|
||||
COUNT(*) as log_count
|
||||
FROM query_logs
|
||||
GROUP BY DATE(created_at), level, query_type
|
||||
ORDER BY log_date DESC, level;
|
||||
```
|
||||
|
||||
## 3. Cassandra数据库设计
|
||||
|
||||
### 3.1 数据模型理解
|
||||
DataTools Pro作为数据比对工具,**不直接管理**Cassandra的数据模型,而是连接到现有的Cassandra集群进行数据查询和比对。
|
||||
|
||||
### 3.2 支持的Cassandra特性
|
||||
|
||||
#### 3.2.1 表结构支持
|
||||
- **单表查询**: 支持任意Cassandra表结构
|
||||
- **分表查询**: 支持TWCS(Time Window Compaction Strategy)分表模式
|
||||
- **复合主键**: 支持多字段组合主键
|
||||
- **所有数据类型**: text、int、timestamp、uuid、blob等
|
||||
|
||||
#### 3.2.2 查询模式
|
||||
```cql
|
||||
-- 单主键查询示例
|
||||
SELECT * FROM keyspace.table_name
|
||||
WHERE primary_key IN (?, ?, ?);
|
||||
|
||||
-- 复合主键查询示例
|
||||
SELECT * FROM keyspace.table_name
|
||||
WHERE (key1='value1' AND key2='value2')
|
||||
OR (key1='value3' AND key2='value4');
|
||||
|
||||
-- 分表查询示例
|
||||
SELECT * FROM keyspace.table_name_0
|
||||
WHERE primary_key IN (?, ?);
|
||||
SELECT * FROM keyspace.table_name_1
|
||||
WHERE primary_key IN (?);
|
||||
```
|
||||
|
||||
#### 3.2.3 分表命名规范
|
||||
```
|
||||
基础表名: user_data
|
||||
分表命名: user_data_0, user_data_1, user_data_2, ..., user_data_13
|
||||
分表计算: shard_index = timestamp // interval_seconds % table_count
|
||||
```
|
||||
|
||||
### 3.3 连接管理
|
||||
```python
|
||||
# Cassandra连接配置
|
||||
cassandra_config = {
|
||||
"cluster_name": "production-cluster",
|
||||
"datacenter": "datacenter1",
|
||||
"hosts": ["10.0.1.100", "10.0.1.101", "10.0.1.102"],
|
||||
"port": 9042,
|
||||
"username": "app_user",
|
||||
"password": "secure_password",
|
||||
"keyspace": "application_data",
|
||||
"table": "user_profiles"
|
||||
}
|
||||
|
||||
# 连接池配置
|
||||
connection_settings = {
|
||||
"connect_timeout": 10,
|
||||
"request_timeout": 30,
|
||||
"load_balancing_policy": "DCAwareRoundRobinPolicy",
|
||||
"retry_policy": "RetryPolicy",
|
||||
"compression": "lz4"
|
||||
}
|
||||
```
|
||||
|
||||
## 4. Redis数据库设计
|
||||
|
||||
### 4.1 数据模型理解
|
||||
DataTools Pro支持Redis集群的数据比对,**不直接管理**Redis的数据结构,而是连接到现有的Redis集群进行数据查询和比对。
|
||||
|
||||
### 4.2 支持的Redis数据类型
|
||||
|
||||
#### 4.2.1 基本数据类型
|
||||
- **String**: 字符串类型,最常用的数据类型
|
||||
- **Hash**: 哈希表,存储字段-值对
|
||||
- **List**: 列表,有序的字符串集合
|
||||
- **Set**: 集合,无序的字符串集合
|
||||
- **Sorted Set**: 有序集合,带分数的有序字符串集合
|
||||
|
||||
#### 4.2.2 查询操作
|
||||
```python
|
||||
# 不同数据类型的查询操作
|
||||
redis_operations = {
|
||||
"string": "GET key",
|
||||
"hash": "HGETALL key",
|
||||
"list": "LRANGE key 0 -1",
|
||||
"set": "SMEMBERS key",
|
||||
"zset": "ZRANGE key 0 -1 WITHSCORES"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 Redis集群配置
|
||||
```python
|
||||
# Redis集群连接配置
|
||||
redis_config = {
|
||||
"cluster_name": "production-redis",
|
||||
"nodes": [
|
||||
{"host": "10.0.1.100", "port": 6379},
|
||||
{"host": "10.0.1.101", "port": 6379},
|
||||
{"host": "10.0.1.102", "port": 6379}
|
||||
],
|
||||
"password": "redis_password",
|
||||
"socket_timeout": 3,
|
||||
"socket_connect_timeout": 3,
|
||||
"max_connections_per_node": 16,
|
||||
"skip_full_coverage_check": True,
|
||||
"decode_responses": True
|
||||
}
|
||||
```
|
||||
|
||||
## 5. 数据迁移和版本管理
|
||||
|
||||
### 5.1 数据库版本控制
|
||||
|
||||
#### 5.1.1 版本信息表
|
||||
```sql
|
||||
CREATE TABLE database_version (
|
||||
version TEXT PRIMARY KEY,
|
||||
applied_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
description TEXT
|
||||
);
|
||||
|
||||
INSERT INTO database_version (version, description)
|
||||
VALUES ('1.0.0', '初始数据库结构');
|
||||
```
|
||||
|
||||
#### 5.1.2 迁移脚本示例
|
||||
```sql
|
||||
-- 版本1.0.0 -> 1.1.0 迁移脚本
|
||||
-- 添加Redis配置支持
|
||||
ALTER TABLE config_groups
|
||||
ADD COLUMN redis_config TEXT;
|
||||
|
||||
INSERT INTO database_version (version, description)
|
||||
VALUES ('1.1.0', '添加Redis配置支持');
|
||||
```
|
||||
|
||||
### 5.2 数据备份策略
|
||||
|
||||
#### 5.2.1 SQLite备份
|
||||
```bash
|
||||
# 完整备份
|
||||
cp config_groups.db config_groups_backup_$(date +%Y%m%d_%H%M%S).db
|
||||
|
||||
# 增量备份(基于时间戳)
|
||||
sqlite3 config_groups.db "
|
||||
SELECT * FROM config_groups
|
||||
WHERE updated_at > '2024-08-05 00:00:00';" > incremental_backup.sql
|
||||
```
|
||||
|
||||
#### 5.2.2 备份恢复
|
||||
```bash
|
||||
# 恢复完整备份
|
||||
cp config_groups_backup_20240805_100000.db config_groups.db
|
||||
|
||||
# 恢复增量数据
|
||||
sqlite3 config_groups.db < incremental_backup.sql
|
||||
```
|
||||
|
||||
## 6. 性能优化
|
||||
|
||||
### 6.1 SQLite优化
|
||||
|
||||
#### 6.1.1 配置优化
|
||||
```sql
|
||||
-- SQLite性能优化设置
|
||||
PRAGMA journal_mode = WAL; -- 写前日志模式
|
||||
PRAGMA synchronous = NORMAL; -- 平衡性能和安全
|
||||
PRAGMA cache_size = 10000; -- 缓存页面数量
|
||||
PRAGMA temp_store = memory; -- 临时表存储在内存
|
||||
PRAGMA mmap_size = 268435456; -- 内存映射大小(256MB)
|
||||
```
|
||||
|
||||
#### 6.1.2 查询优化
|
||||
```sql
|
||||
-- 分页查询优化
|
||||
SELECT * FROM query_history
|
||||
WHERE created_at >= ?
|
||||
ORDER BY created_at DESC
|
||||
LIMIT ? OFFSET ?;
|
||||
|
||||
-- 统计查询优化
|
||||
SELECT query_type, COUNT(*), AVG(execution_time)
|
||||
FROM query_history
|
||||
WHERE created_at >= DATE('now', '-30 days')
|
||||
GROUP BY query_type;
|
||||
```
|
||||
|
||||
### 6.2 连接池优化
|
||||
|
||||
#### 6.2.1 Cassandra连接池
|
||||
```python
|
||||
# 连接池配置
|
||||
cluster = Cluster(
|
||||
hosts=['10.0.1.100', '10.0.1.101'],
|
||||
port=9042,
|
||||
load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='datacenter1'),
|
||||
default_retry_policy=RetryPolicy(),
|
||||
compression=True,
|
||||
protocol_version=4
|
||||
)
|
||||
|
||||
# 会话池管理
|
||||
session_pool = cluster.connect()
|
||||
session_pool.default_timeout = 30
|
||||
```
|
||||
|
||||
#### 6.2.2 Redis连接池
|
||||
```python
|
||||
# Redis集群连接池
|
||||
from rediscluster import RedisCluster
|
||||
|
||||
redis_cluster = RedisCluster(
|
||||
startup_nodes=[
|
||||
{"host": "10.0.1.100", "port": 6379},
|
||||
{"host": "10.0.1.101", "port": 6379}
|
||||
],
|
||||
password="redis_password",
|
||||
socket_timeout=3,
|
||||
socket_connect_timeout=3,
|
||||
max_connections_per_node=16,
|
||||
skip_full_coverage_check=True
|
||||
)
|
||||
```
|
||||
|
||||
## 7. 数据安全
|
||||
|
||||
### 7.1 敏感数据处理
|
||||
|
||||
#### 7.1.1 密码加密
|
||||
```python
|
||||
# 配置中的密码加密存储
|
||||
import base64
|
||||
from cryptography.fernet import Fernet
|
||||
|
||||
def encrypt_password(password, key):
|
||||
"""加密密码"""
|
||||
f = Fernet(key)
|
||||
encrypted_password = f.encrypt(password.encode())
|
||||
return base64.b64encode(encrypted_password).decode()
|
||||
|
||||
def decrypt_password(encrypted_password, key):
|
||||
"""解密密码"""
|
||||
f = Fernet(key)
|
||||
decoded_password = base64.b64decode(encrypted_password.encode())
|
||||
return f.decrypt(decoded_password).decode()
|
||||
```
|
||||
|
||||
#### 7.1.2 数据脱敏
|
||||
```python
|
||||
def mask_sensitive_data(config):
|
||||
"""配置数据脱敏显示"""
|
||||
masked_config = config.copy()
|
||||
if 'password' in masked_config:
|
||||
masked_config['password'] = '***masked***'
|
||||
return masked_config
|
||||
```
|
||||
|
||||
### 7.2 访问控制
|
||||
|
||||
#### 7.2.1 数据库权限
|
||||
```sql
|
||||
-- SQLite访问控制(文件系统级别)
|
||||
chmod 600 config_groups.db -- 仅所有者可读写
|
||||
chown app:app config_groups.db -- 设置正确的所有者
|
||||
```
|
||||
|
||||
#### 7.2.2 网络安全
|
||||
```python
|
||||
# Cassandra SSL连接
|
||||
from cassandra.auth import PlainTextAuthProvider
|
||||
from ssl import SSLContext, PROTOCOL_TLS
|
||||
|
||||
ssl_context = SSLContext(PROTOCOL_TLS)
|
||||
auth_provider = PlainTextAuthProvider(username='app_user', password='password')
|
||||
|
||||
cluster = Cluster(
|
||||
['10.0.1.100'],
|
||||
ssl_context=ssl_context,
|
||||
auth_provider=auth_provider
|
||||
)
|
||||
```
|
||||
|
||||
## 8. 监控和维护
|
||||
|
||||
### 8.1 数据库监控
|
||||
|
||||
#### 8.1.1 SQLite监控
|
||||
```sql
|
||||
-- 数据库大小监控
|
||||
SELECT
|
||||
(page_count * page_size) / 1024 / 1024 as db_size_mb
|
||||
FROM pragma_page_count(), pragma_page_size();
|
||||
|
||||
-- 表大小统计
|
||||
SELECT
|
||||
name,
|
||||
COUNT(*) as row_count
|
||||
FROM sqlite_master sm
|
||||
JOIN (
|
||||
SELECT 'config_groups' as name, COUNT(*) as cnt FROM config_groups
|
||||
UNION ALL
|
||||
SELECT 'query_history' as name, COUNT(*) as cnt FROM query_history
|
||||
UNION ALL
|
||||
SELECT 'query_logs' as name, COUNT(*) as cnt FROM query_logs
|
||||
) t ON sm.name = t.name;
|
||||
```
|
||||
|
||||
#### 8.1.2 连接监控
|
||||
```python
|
||||
# 连接健康检查
|
||||
def check_database_health():
|
||||
"""检查数据库连接健康状态"""
|
||||
health_status = {
|
||||
"sqlite": check_sqlite_health(),
|
||||
"cassandra": check_cassandra_health(),
|
||||
"redis": check_redis_health()
|
||||
}
|
||||
return health_status
|
||||
|
||||
def check_sqlite_health():
|
||||
"""检查SQLite健康状态"""
|
||||
try:
|
||||
conn = sqlite3.connect('config_groups.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT 1")
|
||||
conn.close()
|
||||
return {"status": "healthy", "timestamp": datetime.now()}
|
||||
except Exception as e:
|
||||
return {"status": "unhealthy", "error": str(e)}
|
||||
```
|
||||
|
||||
### 8.2 数据维护
|
||||
|
||||
#### 8.2.1 数据清理
|
||||
```sql
|
||||
-- 清理30天前的查询日志
|
||||
DELETE FROM query_logs
|
||||
WHERE created_at < DATE('now', '-30 days');
|
||||
|
||||
-- 清理大型历史记录的详细数据
|
||||
UPDATE query_history
|
||||
SET raw_results = NULL,
|
||||
differences_data = NULL,
|
||||
identical_data = NULL
|
||||
WHERE created_at < DATE('now', '-90 days');
|
||||
```
|
||||
|
||||
#### 8.2.2 数据库维护
|
||||
```sql
|
||||
-- SQLite数据库优化
|
||||
VACUUM; -- 重建数据库文件,回收空间
|
||||
ANALYZE; -- 更新查询计划统计信息
|
||||
PRAGMA optimize; -- 优化数据库性能
|
||||
REINDEX; -- 重建所有索引
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**版本**: v1.0
|
||||
**更新日期**: 2024-08-05
|
||||
**维护者**: DataTools Pro Team
|
Reference in New Issue
Block a user