mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
244 lines
5.8 KiB
Markdown
244 lines
5.8 KiB
Markdown
# Long-Term Stability Guide
|
|
|
|
This document outlines additional measures taken to ensure long-term stability of the NoDupeLabs database layer.
|
|
|
|
## Version Management
|
|
|
|
### Schema Versioning
|
|
|
|
Each database schema version is tracked to enable safe migrations:
|
|
|
|
```python
|
|
SCHEMA_VERSION = "1.0.0"
|
|
|
|
def get_schema_version():
|
|
"""Get current schema version."""
|
|
return SCHEMA_VERSION
|
|
```
|
|
|
|
### Module Versioning
|
|
|
|
All core modules follow semantic versioning (SemVer):
|
|
|
|
```
|
|
MAJOR.MINOR.PATCH
|
|
│ │ │
|
|
│ │ └── Bug fixes
|
|
│ └──────── New features (backward compatible)
|
|
└────────────── Breaking changes
|
|
```
|
|
|
|
## Deprecation Policy
|
|
|
|
### Deprecated APIs
|
|
|
|
APIs marked for deprecation follow this pattern:
|
|
|
|
```python
|
|
import warnings
|
|
|
|
def deprecated_function():
|
|
"""Deprecated: Use new_function() instead.
|
|
|
|
Deprecated since version 1.2.0, will be removed in 2.0.0.
|
|
"""
|
|
warnings.warn(
|
|
"deprecated_function() is deprecated, use new_function() instead",
|
|
DeprecationWarning,
|
|
stacklevel=2
|
|
)
|
|
```
|
|
|
|
### Deprecation Timeline
|
|
|
|
| Feature | Deprecated In | Removed In | Replacement |
|
|
|---------|--------------|------------|-------------|
|
|
| `db.transaction` | 1.0.0 | 2.0.0 | `db.transaction_manager` |
|
|
|
|
## Error Handling
|
|
|
|
### Custom Exception Hierarchy
|
|
|
|
```python
|
|
class DatabaseError(Exception):
|
|
"""Base exception for database errors."""
|
|
pass
|
|
|
|
class ConnectionError(DatabaseError):
|
|
"""Database connection errors."""
|
|
pass
|
|
|
|
class QueryError(DatabaseError):
|
|
"""Query execution errors."""
|
|
pass
|
|
|
|
class IntegrityError(DatabaseError):
|
|
"""Data integrity violations."""
|
|
pass
|
|
```
|
|
|
|
### Error Codes
|
|
|
|
| Code | Description | Resolution |
|
|
|------|-------------|------------|
|
|
| DB001 | Connection failed | Check database file path |
|
|
| DB002 | Query syntax error | Validate SQL syntax |
|
|
| DB003 | Constraint violation | Check data constraints |
|
|
| DB004 | Transaction failed | Retry with fresh transaction |
|
|
|
|
## Backup and Recovery
|
|
|
|
### Automated Backup
|
|
|
|
```python
|
|
def create_backup(db_path: str, backup_dir: str) -> str:
|
|
"""Create timestamped database backup.
|
|
|
|
Args:
|
|
db_path: Path to source database
|
|
backup_dir: Directory for backup files
|
|
|
|
Returns:
|
|
Path to created backup file
|
|
"""
|
|
from datetime import datetime
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
backup_path = f"{backup_dir}/backup_{timestamp}.db"
|
|
# Implementation...
|
|
return backup_path
|
|
```
|
|
|
|
### Recovery Procedures
|
|
|
|
1. **Full Restore**: Restore from most recent backup
|
|
2. **Point-in-Time**: Restore to specific transaction
|
|
3. **Schema Rollback**: Revert to previous schema version
|
|
|
|
## Security Measures
|
|
|
|
### SQL Injection Prevention
|
|
|
|
- Always use parameterized queries
|
|
- Validate all user input
|
|
- Use allowlist for table/column names
|
|
|
|
```python
|
|
# ✅ Safe - parameterized query
|
|
cursor.execute("SELECT * FROM files WHERE id = ?", (id_value,))
|
|
|
|
# ❌ Unsafe - string concatenation
|
|
cursor.execute(f"SELECT * FROM files WHERE id = {id_value}")
|
|
```
|
|
|
|
### Access Control
|
|
|
|
- File permissions: 0600 (owner read/write only)
|
|
- Database directory: 0700 (owner only)
|
|
- No remote database access (local files only)
|
|
|
|
## Performance Guidelines
|
|
|
|
### Query Optimization
|
|
|
|
| Operation | Expected Time | Threshold |
|
|
|-----------|--------------|-----------|
|
|
| Single row lookup | < 1ms | 10ms |
|
|
| Batch insert (1000 rows) | < 100ms | 500ms |
|
|
| Full table scan | < 1s | 5s |
|
|
| Database vacuum | < 10s | 30s |
|
|
|
|
### Index Usage
|
|
|
|
Always index:
|
|
- Foreign keys
|
|
- Columns used in WHERE clauses
|
|
- Columns used in ORDER BY
|
|
|
|
## Testing Strategy
|
|
|
|
### Test Coverage Requirements
|
|
|
|
- **Unit tests**: 80% minimum
|
|
- **Integration tests**: All database operations
|
|
- **Performance tests**: Regression detection
|
|
|
|
### Test Categories
|
|
|
|
```
|
|
tests/
|
|
├── unit/ # Individual component tests
|
|
├── integration/ # Multi-component tests
|
|
├── performance/ # Benchmark tests
|
|
├── security/ # Penetration tests
|
|
└── regression/ # Bug fix verification
|
|
```
|
|
|
|
## Maintenance Windows
|
|
|
|
### Routine Maintenance
|
|
|
|
| Task | Frequency | Duration |
|
|
|------|-----------|----------|
|
|
| VACUUM | Weekly | < 1 min |
|
|
| ANALYZE | Weekly | < 1 min |
|
|
| Integrity Check | Monthly | < 5 min |
|
|
| Full Backup | Daily | < 10 min |
|
|
|
|
## Monitoring
|
|
|
|
### Health Checks
|
|
|
|
```python
|
|
def health_check(db_path: str) -> Dict[str, Any]:
|
|
"""Perform database health check.
|
|
|
|
Returns:
|
|
Dictionary with health status, issues, and recommendations
|
|
"""
|
|
return {
|
|
"status": "healthy",
|
|
"schema_version": SCHEMA_VERSION,
|
|
"file_size_mb": get_file_size(db_path),
|
|
"page_count": get_page_count(db_path),
|
|
"free_pages": get_free_pages(db_path),
|
|
"integrity": check_integrity(db_path),
|
|
"recommendations": []
|
|
}
|
|
}
|
|
```
|
|
|
|
## Change Log
|
|
|
|
All significant changes must be documented in CHANGELOG.md following Keep a Changelog format:
|
|
|
|
```markdown
|
|
## [1.1.0] - 2026-02-14
|
|
|
|
### Added
|
|
- New DatabaseCleanup class for maintenance
|
|
- New DatabaseCache class for query caching
|
|
|
|
### Changed
|
|
- Refactored Database wrapper for better component organization
|
|
|
|
### Fixed
|
|
- Fixed transaction attribute conflict (transaction -> transaction_manager)
|
|
```
|
|
|
|
## Support and Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
| Issue | Cause | Solution |
|
|
|-------|-------|----------|
|
|
| Database locked | Concurrent writes | Use transaction context manager |
|
|
| Slow queries | Missing indexes | Add indexes to frequently queried columns |
|
|
| Corruption | Improper shutdown | Restore from backup, run integrity check |
|
|
| Disk full | No VACUUM | Run VACUUM to reclaim space |
|
|
|
|
### Getting Help
|
|
|
|
1. Check CHANGELOG.md for recent changes
|
|
2. Run health_check() for diagnostics
|
|
3. Review logs in database db_logs table
|
|
4. Consult ISO_STANDARDS_COMPLIANCE.md for standards
|