Phase 1: Query-Optimierung
Bevor Sie Infrastruktur hinzufügen, optimieren Sie, was Sie haben. Die meisten Leistungsprobleme werden durch bessere Indizes und Abfragen gelöst.
CREATE INDEX idx_orders_customer_status ON orders(customer_id, status, created_at DESC);
CREATE INDEX idx_products_category_price ON products(category_id, price);Phase 2: Lesereplikate
Bei leseschweren Lasten fügen Sie Lesereplikate hinzu, um die Last zu verteilen.
class DatabaseService {
async getOrder(id) {
return this.readDb.order.findUnique({ where: { id } });
}
async createOrder(data) {
return this.writeDb.order.create({ data });
}
}Phase 3: Caching-Schicht
Heißes Datenbankdaten in Redis zu cachieren, um die Datenbanklast zu reduzieren. Verwenden Sie Redis mit entsprechender TTL und Invaliderstrategien.
async getUser(id) {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached);
const user = await db.user.findUnique({ where: { id } });
await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
return user;
}Phase 4: Sharding
Wenn ein einzelner Server die Schreiblast nicht mehr bewältigen kann, teilen Sie die Daten auf mehrere Server auf.
| Strategie | Best für | Handelsübel |
|---|---|---|
| Range-basiert | Zeitreihendaten | Heißpunkte auf den neuesten Daten |
| Hash-basiert | Einheitliche Verteilung | Range-Abfragen sind schwierig |
| Geografisch | Latenzsensitiven Apps | Komplexe Rebalancierung |
Entscheidungsrahmen
- Optimieren Sie Abfragen und fügen Sie Indizes hinzu
- Fügen Sie Lesereplikate hinzu, um leseschwere Lasten zu bewältigen
- Cachen Sie heißes Datenbankdaten mit Redis
- Shardieren Sie nur, wenn nichts anderes funktioniert