anchorage_layer_simple/features/migration-base-donnees-finalisee.md
ncantu 0960e43a45 Optimisation mémoire api-anchorage avec base de données SQLite
**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)
2026-01-27 21:12:22 +01:00

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 → 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é