**Motivations:** - Réduction drastique de la consommation mémoire lors des ancrages - Élimination du chargement de 173k+ UTXOs à chaque requête - Stabilisation de la mémoire système sous charge élevée (50+ ancrages/minute) **Root causes:** - api-anchorage chargeait tous les UTXOs (173k+) via listunspent RPC à chaque ancrage - Filtrage et tri de 173k+ objets en mémoire pour sélectionner un seul UTXO - Croissance mémoire de ~16 MB toutes les 12 secondes avec 50 ancrages/minute - Saturation mémoire système en quelques minutes **Correctifs:** - Création du module database.js pour gérer la base de données SQLite partagée - Remplacement de listunspent RPC par requête SQL directe avec LIMIT 1 - Sélection directe d'un UTXO depuis la DB au lieu de charger/filtrer 173k+ objets - Marquage des UTXOs comme dépensés dans la DB après utilisation - Fermeture propre de la base de données lors de l'arrêt **Evolutions:** - Utilisation de la base de données SQLite partagée avec signet-dashboard - Réduction mémoire de 99.999% (173k+ objets → 1 objet par requête) - Amélioration des performances (requête SQL indexée vs filtrage en mémoire) - Optimisation mémoire de signet-dashboard (chargement UTXOs seulement si nécessaire) - Monitoring de lockedUtxos dans api-anchorage pour détecter les fuites - Nettoyage des intervalles frontend pour éviter les fuites mémoire **Pages affectées:** - api-anchorage/src/database.js (nouveau) - api-anchorage/src/bitcoin-rpc.js - api-anchorage/src/server.js - api-anchorage/package.json - signet-dashboard/src/bitcoin-rpc.js - signet-dashboard/public/app.js - features/optimisation-memoire-applications.md (nouveau) - features/api-anchorage-optimisation-base-donnees.md (nouveau)
93 lines
3.0 KiB
Markdown
93 lines
3.0 KiB
Markdown
# Migration base de données SQLite - Finalisation
|
|
|
|
**Date:** 2026-01-27
|
|
**Auteur:** Équipe 4NK
|
|
|
|
## Actions réalisées
|
|
|
|
### 1. Migration des données ✅
|
|
|
|
**Fichiers migrés:**
|
|
- `utxo_list.txt` → Table `utxos` (68 398 UTXOs)
|
|
- `hash_list.txt` → Table `anchors` (32 719 ancrages)
|
|
- `fees_list.txt` → Table `fees` (2 667 frais)
|
|
- `utxo_list_cache.txt` → Table `cache` (clé `utxo_list_cache`)
|
|
- `hash_list_cache.txt` → Table `cache` (clé `hash_list_cache`)
|
|
|
|
**Résultat:**
|
|
- ✅ Base de données `signet.db` créée (40 MB)
|
|
- ✅ Toutes les données migrées avec succès
|
|
|
|
### 2. Suppression des fichiers texte ✅
|
|
|
|
**Fichiers supprimés:**
|
|
- ✅ `utxo_list.txt` (6.3 MB)
|
|
- ✅ `utxo_list_cache.txt` (29 bytes)
|
|
- ✅ `hash_list.txt` (5.2 MB)
|
|
- ✅ `hash_list_cache.txt` (95 bytes)
|
|
- ✅ `fees_list.txt` (411 KB)
|
|
- ✅ `anchor_count.txt` (100 bytes)
|
|
|
|
**Total libéré:** ~11.9 MB de fichiers texte
|
|
|
|
### 3. Nettoyage du code ✅
|
|
|
|
**Imports supprimés dans `bitcoin-rpc.js`:**
|
|
- ❌ `readFileSync` (plus utilisé)
|
|
- ❌ `writeFileSync` (plus utilisé)
|
|
- ❌ `existsSync` (plus utilisé)
|
|
- ❌ `join` (plus utilisé)
|
|
- ❌ `dirname` (plus utilisé)
|
|
- ❌ `fileURLToPath` (plus utilisé)
|
|
|
|
**Commentaires mis à jour:**
|
|
- ✅ Routes serveur: mentionnent maintenant "base de données" au lieu de "fichier texte"
|
|
- ✅ Méthodes: commentaires mis à jour pour refléter l'utilisation de la base de données
|
|
|
|
### 4. Code finalisé ✅
|
|
|
|
**Fichiers modifiés:**
|
|
- ✅ `signet-dashboard/src/bitcoin-rpc.js` : Nettoyé, utilise uniquement la base de données
|
|
- ✅ `signet-dashboard/src/server.js` : Commentaires mis à jour
|
|
- ✅ `signet-dashboard/src/database.js` : Module de gestion de la DB
|
|
|
|
**Vérifications:**
|
|
- ✅ Syntaxe JavaScript valide
|
|
- ✅ Pas d'erreurs de linting
|
|
- ✅ Aucune référence restante aux fichiers texte dans le code
|
|
|
|
## Architecture finale
|
|
|
|
### Source de vérité
|
|
|
|
**Base de données SQLite** (`/home/ncantu/Bureau/code/bitcoin/data/signet.db`)
|
|
- Source unique de vérité pour toutes les données
|
|
- Tables: `utxos`, `anchors`, `fees`, `cache`
|
|
|
|
### Compatibilité maintenue
|
|
|
|
**Routes de compatibilité:**
|
|
- `/api/utxo/list.txt` : Génère le fichier depuis la base de données
|
|
- `/api/hash/list.txt` : Génère le fichier depuis la base de données
|
|
|
|
**Avantages:**
|
|
- Frontend existant continue de fonctionner sans modification
|
|
- Données toujours à jour depuis la base de données
|
|
- Performance améliorée (génération à la volée)
|
|
|
|
## Prochaines étapes
|
|
|
|
1. ✅ Migration des données
|
|
2. ✅ Suppression des fichiers texte
|
|
3. ✅ Nettoyage du code
|
|
4. ✅ Finalisation
|
|
5. ⏳ Tests en production
|
|
6. ⏳ Monitoring des performances
|
|
|
|
## Notes importantes
|
|
|
|
- **Pas de fallback** : Le code ne peut plus fonctionner sans la base de données
|
|
- **Migration requise** : Si la base de données n'existe pas, exécuter `init-db.mjs` puis `migrate-from-files.mjs`
|
|
- **Backup recommandé** : Conserver une copie de `signet.db` régulièrement
|
|
- **Fichiers texte** : Les fichiers texte ont été supprimés, la base de données est la seule source de vérité
|