Curs 3 - Baze de Date în System Design: SQL vs. NoSQL, Sharding și Replicare

În acest curs vom explora diferitele tipuri de baze de date, strategiile de scalare și optimizare utilizate în arhitecturile software moderne.

1. Tipuri de Baze de Date

Există două categorii principale de baze de date: SQL (relaționale) și NoSQL (non-relaționale). Alegerea corectă depinde de cerințele aplicației.

- SQL: Structurate în tabele cu relații definite (ex: MySQL, PostgreSQL).

- NoSQL: Concepute pentru scalabilitate și flexibilitate (ex: MongoDB, Cassandra, DynamoDB).

2. Modele de Stocare NoSQL

- Key-Value Stores: Redis, DynamoDB - rapid pentru accesări de tip cheie-valoare.

- Document Stores: MongoDB, CouchDB - datele sunt stocate ca documente JSON.

- Column Stores: Cassandra, BigTable - optimizate pentru citiri rapide la scală mare.

- Graph Databases: Neo4j - ideal pentru modelarea relațiilor complexe dintre entități.

3. Sharding și Partiționare

Sharding-ul împarte datele pe mai multe baze de date pentru a îmbunătăți scalabilitatea.

- Range-based Sharding: Datele sunt împărțite pe baza unui interval (ex: ID-uri 1-1000 pe un server, 1001-2000 pe altul).

- Hash-based Sharding: O funcție hash distribuie datele uniform între noduri.

- Database Federation: Fiecare serviciu gestionează o bază de date independentă.

4. Replicarea Bazelor de Date

Replicarea permite stocarea datelor pe mai multe servere pentru a îmbunătăți redundanța și performanța.

- Master-Slave Replication: Un server principal scrie datele, iar replicile sunt folosite pentru citiri.

- Multi-Master Replication: Mai multe noduri pot efectua atât citiri, cât și scrieri.

- Read-Replicas: Replici ale bazei de date utilizate exclusiv pentru citiri.

- Consistență puternică vs. eventuală: Alegerea între performanță și sincronizare exactă a datelor.

5. Caching și Optimizare

Cache-ul ajută la reducerea solicitărilor către baza de date prin stocarea rezultatelor interogărilor frecvente.

- Redis vs. Memcached: Redis oferă persistență, Memcached este mai rapid dar fără stocare pe disc.

- Cache Invalidation Patterns: Cum menținem cache-ul actualizat.

- Write-Through vs. Write-Behind Caching: Strategii de scriere în cache pentru a optimiza accesul la date.

6. Exemplu Practic - Arhitectura unei Platforme de E-Commerce

Cum putem gestiona milioane de produse și tranzacții într-o platformă de e-commerce scalabilă?

a) Alegerea Bazei de Date

- SQL (PostgreSQL, MySQL): Potrivit pentru gestionarea comenzilor și plăților.

- NoSQL (MongoDB, DynamoDB): Ideal pentru catalogul de produse și recenzii.

- Redis pentru caching: Stocarea rezultatelor interogărilor frecvente pentru a reduce încărcarea bazei de date.

b) Replicare și Scalare

- Master-Slave Replication pentru citiri rapide.

- Sharding pentru împărțirea datelor între mai multe servere.

c) Optimizarea Performanței

- Indexare eficientă pentru căutări rapide.

- CDN pentru livrarea rapidă a imaginilor produselor.

Resurse suplimentare: