• 1. optimiser les performances d’une api node.js avec postgresql : pool, index et partitionnement

  • 1.1. Mettre en place un pool de connexions efficace

  • 1.2. Créer des index adaptés

  • 1.3. Partitionner les tables volumineuses

  • 1.4. Bonnes pratiques et conseils

  • 1.5. Conclusion

optimiser les performances d’une api node.js avec postgresql : pool, index et partitionnement

Image de optimiser les performances d’une api node.js avec postgresql : pool, index et partitionnement

optimiser les performances d’une api node.js avec postgresql : pool, index et partitionnement

Lorsque votre API Node.js rencontre un volume important de requêtes, la base de données PostgreSQL peut devenir un goulot d’étranglement. Cet article détaille trois leviers techniques pour gagner en rapidité : la gestion du pool de connexions, l’indexation des colonnes stratégiques et le partitionnement des tables volumineuses. Vous trouverez des exemples concrets de code, des commandes CLI et des métriques de performance.

1. Mettre en place un pool de connexions efficace

Sans pool, chaque requête ouvrirait une connexion séparée à PostgreSQL, générant une surcharge CPU et mémoire. Avec pg (le client officiel PostgreSQL pour Node.js), vous pouvez gérer un pool :

const { Pool } = require('pg');

const pool = new Pool({
  user: 'dbuser',
  host: 'localhost',
  database: 'mydb',
  password: 'secret',
  port: 5432,
  max: 20,          // nombre max de connexions
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
});

module.exports = pool;

Ensuite, dans vos routes Express (Node.js), récupérez une connexion :

app.get('/items', async (req, res) => {
  try {
    const client = await pool.connect();
    const result = await client.query('SELECT * FROM items');
    client.release();
    res.json(result.rows);
  } catch (err) {
    console.error('DB Error', err);
    res.status(500).send('Erreur serveur');
  }
});

Tip perf : surveillez totalCount de connexions avec SELECT * FROM pg_stat_activity;.

2. Créer des index adaptés

Une bonne indexation peut réduire un scan complet de table de plusieurs secondes à quelques millisecondes. Analysez d’abord vos requêtes lentes :

EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 123;

Si le plan affiche un Seq Scan, créez un index :

CREATE INDEX idx_orders_customer ON orders(customer_id);

Re-testez avec EXPLAIN ANALYZE pour mesurer le gain. Vous pouvez également combiner plusieurs colonnes si vous filtrez sur plusieurs champs.

3. Partitionner les tables volumineuses

Pour des tables à plusieurs millions de lignes (logs, transactions, etc.), le partitionnement permet de diviser physiquement les données par plage de dates, par exemple :

CREATE TABLE events (
  id SERIAL PRIMARY KEY,
  occurred_at TIMESTAMP NOT NULL,
  data JSONB
) PARTITION BY RANGE (occurred_at);

CREATE TABLE events_2023 PARTITION OF events
  FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
  
CREATE TABLE events_2024 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');

Les requêtes sur occurred_at ciblent automatiquement le bon « chunk », réduisant le temps de recherche. Pensez à rechecker régulièrement les statistiques via ANALYZE et PostgreSQL.

Bonnes pratiques et conseils

  • Activez la compression des logs et utilisez pg_stat_statements pour repérer les requêtes les plus lourdes.
  • Cachez en mémoire (Redis) les réponses peu volatiles pour réduire la charge SQL.
  • Surveillez les métriques CPU, I/O et mémoire avec des outils comme Prometheus/Grafana.
  • Intégrez ces optimisations dès la phase de conception pour éviter la dette technique.

Conclusion

En combinant un pool de connexions bien configuré, des index adaptés et un partitionnement réfléchi, vous pouvez réduire significativement les temps de réponse de votre API Node.js sous PostgreSQL. Ces optimisations se traduisent directement en meilleure expérience utilisateur et en réduction des coûts infrastructure.

Envie d’un audit performance sur-mesure ? Contactez nos experts pour une séance de consulting offerte.

Image de Ingénieur·e Cybersécurité : fiche métier simple (rôle, missions, outils, salaires)

Ingénieur·e Cybersécurité : fiche métier simple (rôle, missions, outils, salaires)

Fiche métier Ingénieur Cybersécurité : définition simple, missions, outils (audit, pentest, IAM), compétences, formation, salaires et exemples concrets.
Image de Ingénieur·e DevOps : fiche métier simple (rôle, missions, outils, salaires)

Ingénieur·e DevOps : fiche métier simple (rôle, missions, outils, salaires)

Fiche métier Ingénieur DevOps : définition simple, missions, outils (CI/CD, Docker, Kubernetes), compétences, formation, salaires et exemples concrets.
Image de Développeur·se Back-End : fiche métier simple (définition, missions, outils, compétences)

Développeur·se Back-End : fiche métier simple (définition, missions, outils, compétences)

Fiche métier du développeur back-end, expliquée simplement : définition, missions, outils (Node.js, API, bases de données), compétences, formations et débouchés.
DEVIS GRATUIT

Un projet en tête ? Vous avez des questions ?

Contactez nous pour recevoir un devis gratuitement, des réponses à vos questions ou une séance de consulting offerte avec l'un de nos experts :

Nous contacter