Database per service σημαίνει ότι κάθε microservice διαθέτει τη δική του ιδιωτική βάση δεδομένων και κανένα άλλο service δεν μπορεί να διαβάσει ή να γράψει σε αυτήν άμεσα. Άλλα services πρέπει να επικοινωνήσουν μέσω του API του κατέχοντος service.
Πώς λειτουργεί
text
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Orders │ │ Payments │ │ Users │
│ service │ │ service │ │ service │
└────┬─────┘ └────┬─────┘ └────┬─────┘
▼ ▼ ▼
ordersDB paymentsDB usersDB ← private, no cross-access
Αν το Orders χρειάζεται δεδομένα χρήστη, καλεί το Users API — δεν κάνει ερώτημα στο usersDB απευθείας.
Γιατί να την επιβάλλουμε
- Loose coupling — ένα service μπορεί να αλλάξει το schema του ελεύθερα.
- Independent deployment — χωρίς κοινές migrations schema σε όλες τις ομάδες.
- Technology choice — ένα service χρησιμοποιεί Postgres, ένα άλλο MongoDB.
Το κόστος
text
With no shared DB:
✗ no cross-service JOINs
✗ no single ACID transaction across services
→ need API composition, replication, or sagas instead
Παγίδα
Μια κοινή βάση δεδομένων είναι το κλασικό anti-pattern — συνδέει τα services σε σιωπή έτσι δεν μπορούν να αναπτυχθούν ανεξάρτητα.
Γιατί έχει σημασία
Οι ιδιωτικές βάσεις δεδομένων είναι αυτές που κάνουν τα services πραγματικά ανεξάρτητα· μοιράστε μια βάση δεδομένων και έχετε ένα κατανεμημένο monolith.
