**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)
3.0 KiB
3.0 KiB
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→ Tableutxos(68 398 UTXOs)hash_list.txt→ Tableanchors(32 719 ancrages)fees_list.txt→ Tablefees(2 667 frais)utxo_list_cache.txt→ Tablecache(cléutxo_list_cache)hash_list_cache.txt→ Tablecache(cléhash_list_cache)
Résultat:
- ✅ Base de données
signet.dbcréé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
- ✅ Migration des données
- ✅ Suppression des fichiers texte
- ✅ Nettoyage du code
- ✅ Finalisation
- ⏳ Tests en production
- ⏳ 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.mjspuismigrate-from-files.mjs - Backup recommandé : Conserver une copie de
signet.dbrégulièrement - Fichiers texte : Les fichiers texte ont été supprimés, la base de données est la seule source de vérité