Read replicas — distribute read queries across multiple DB instances.
1const { Pool } = require("pg");23const primary = new Pool({ host: "primary.db" });4const replicas = [5 new Pool({ host: "replica1.db" }),6 new Pool({ host: "replica2.db" }),7];89let replicaIndex = 0;1011function getReplica() {12 const replica = replicas[replicaIndex % replicas.length];13 replicaIndex++;14 return replica;15}1617async function query(sql, params, options = {}) {18 const { write = false } = options;1920 if (write) {21 return primary.query(sql, params);22 }2324 // Reads with retry on replica failure25 try {26 return await getReplica().query(sql, params);27 } catch (err) {28 console.error("Replica failed, falling back to primary");29 return primary.query(sql, params);30 }31}3233// Usage34const users = await query("SELECT * FROM users"); // goes to replica35await query("INSERT INTO users ...", [], { write: true }); // primary
Key points: