Firebase Firestore: τι είναι, NoSQL και πώς λειτουργεί

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-12 Χρόνος ανάγνωσης: 10 λεπ

Το Firebase Firestore είναι μια cloud NoSQL βάση δεδομένων πραγματικού χρόνου από την Google, σχεδιασμένη για κινητές και διαδικτυακές εφαρμογές. Αποθηκεύει δεδομένα με τη μορφή συλλογών και εγγράφων με αυτόματο συγχρονισμό μεταξύ πελατών. Σύμφωνα με την τεκμηρίωση Firebase, 2025, το Firestore υποστηρίζει πολυπεριφερειακή ανάπτυξη με εγγυημένη συνέπεια και παρέχει αυτόματη κλιμάκωση χωρίς την ανάγκη διαχείρισης διακομιστών. Η βάση δεδομένων ενσωματώνεται με το Firebase Authentication και το Cloud Functions για τη δημιουργία πλήρους backend χωρίς δική σας υποδομή διακομιστή.

Κύρια σημεία

  • Firestore είναι μια cloud NoSQL βάση δεδομένων πραγματικού χρόνου με αυτόματο συγχρονισμό δεδομένων μεταξύ πελατών.
  • Τα δεδομένα οργανώνονται σε συλλογές και έγγραφα με ευέλικτο σχήμα που δεν απαιτεί εκ των προτέρων περιγραφή πεδίων.
  • Υποστηρίζει offline πρόσβαση: τα δεδομένα αποθηκεύονται προσωρινά στη συσκευή και συγχρονίζονται όταν αποκατασταθεί η σύνδεση.
  • Κλιμακώνεται αυτόματα έως εκατομμύρια ταυτόχρονες συνδέσεις χωρίς χειροκίνητη διαμόρφωση διακομιστών.
  • Ενσωματώνεται με το Firebase Authentication και το Cloud Functions για τη δημιουργία λογικής διακομιστή χωρίς δικό σας backend.

Τι είναι το Firebase Firestore;

Firebase Firestore είναι μια ευέλικτη, κλιμακούμενη NoSQL βάση δεδομένων που ξεκίνησε από την Google το 2019 ως εξέλιξη του Firebase Realtime Database. Αποθηκεύει δεδομένα με τη μορφή συλλογών εγγράφων, όπου κάθε έγγραφο περιέχει ένα σύνολο ζευγών κλειδιού-τιμής. Σε αντίθεση με τις παραδοσιακές σχεσιακές βάσεις, το Firestore δεν απαιτεί προκαθορισμένο σχήμα — η δομή των δεδομένων διαμορφώνεται δυναμικά με βάση τα εγγεγραμμένα έγγραφα.

Η βασική διαφορά του Firestore από τις κλασικές cloud βάσεις είναι ο ενσωματωμένος συγχρονισμός πραγματικού χρόνου. Όταν τα δεδομένα αλλάζουν στον διακομιστή, όλοι οι συνδεδεμένοι πελάτες λαμβάνουν ενημερώσεις μέσω μιας μόνιμης σύνδεσης WebSocket. Αυτό εξαλείφει την ανάγκη για χειροκίνητη αναζήτηση διακομιστή και επιτρέπει τη δημιουργία εφαρμογών με ζωντανές ενημερώσεις: συνομιλίες, ροές δραστηριότητας, συνεργατικούς επεξεργαστές και συστήματα παρακολούθησης.

Η βάση δεδομένων είναι διαθέσιμη σε όλες τις κύριες πλατφόρμες: Android, iOS, Web (JavaScript) και γλώσσες διακομιστή μέσω του Admin SDK. Το Firestore παρέχει SDK για Swift, Kotlin, JavaScript, Python, Go, Java και Node.js. Σύμφωνα με στοιχεία της Google, το Firestore επεξεργάζεται πάνω από 100 δισεκατομμύρια ερωτήματα την ημέρα σε ολόκληρο το οικοσύστημα Firebase, γεγονός που επιβεβαιώνει την αξιοπιστία του ως βάσης για εφαρμογές παραγωγής.

Βασικές έννοιες: συλλογές και έγγραφα

Στο Firestore, τα δεδομένα οργανώνονται σε μια ιεραρχική δομή. Μια συλλογή είναι ένα δοχείο εγγράφων, παρόμοιο με έναν πίνακα σε SQL, αλλά χωρίς σταθερό σχήμα. Ένα έγγραφο είναι μια εγγραφή που περιέχει πεδία διαφόρων τύπων: συμβολοσειρές, αριθμούς, boolean τιμές, πίνακες, ένθετα αντικείμενα και γεωσημεία. Τα έγγραφα μπορούν να περιέχουν υποσυλλογές, επιτρέποντας τη δημιουργία ένθετων δομών δεδομένων οποιουδήποτε βάθους.

kotlin
val db = FirebaseFirestore.getInstance()

val user = hashMapOf(
    "name" to "Άννα Πετρόβα",
    "email" to "anna@example.com",
    "age" to 28,
    "isActive" to true
)

db.collection("users")
    .add(user)
    .addOnSuccessListener { docRef ->
        Log.d("TAG", "Έγγραφο προστέθηκε με ID: ${docRef.id}")
    }

Κάθε έγγραφο σε μια συλλογή έχει ένα μοναδικό αναγνωριστικό που μπορεί να δημιουργηθεί αυτόματα ή να οριστεί χειροκίνητα. Το Firestore ευρετηριάζει αυτόματα όλα τα πεδία του εγγράφου, επιτρέποντας την εκτέλεση σύνθετων ερωτημάτων με φιλτράρισμα, ταξινόμηση και περιορισμό του αριθμού αποτελεσμάτων χωρίς προηγούμενη διαμόρφωση ευρετηρίων.

Firebase Firestore vs Realtime Database: σύγκριση

Firestore και Firebase Realtime Database είναι δύο cloud βάσεις δεδομένων πραγματικού χρόνου από την Google. Αν και και οι δύο παρέχουν συγχρονισμό πραγματικού χρόνου, έχουν θεμελιώδεις διαφορές στο μοντέλο δεδομένων, την κλιμάκωση και την τιμολόγηση. Η κατανόηση αυτών των διαφορών είναι κρίσιμη κατά την επιλογή της κατάλληλης βάσης για ένα συγκεκριμένο έργο.

ΧαρακτηριστικόFirestoreRealtime Database
Μοντέλο δεδομένωνΣυλλογές και έγγραφαΕνιαίο δέντρο JSON
ΣυνέπειαΙσχυρή (strong consistency)Τελική συνέπεια
ΕρωτήματαΣύνθετα με φιλτράρισμα και ταξινόμησηΜόνο φιλτράρισμα κατά μία παράμετρο
ΚλιμάκωσηΑυτόματη, πολυπεριφερειακήΜία περιοχή, έως 200k συνδέσεις
ΤιμολόγησηΑνά λειτουργία ανάγνωσης/εγγραφής/διαγραφήςΑνά όγκο μεταφερόμενων δεδομένων

Η κύρια αρχιτεκτονική διαφορά είναι το μοντέλο δεδομένων. Το Realtime Database αποθηκεύει τα πάντα σε ένα μεγάλο δέντρο JSON, περιπλέκοντας τα ερωτήματα με βαθιά ένθεση. Το Firestore χρησιμοποιεί συλλογές και έγγραφα, επιτρέποντας την εκτέλεση σύνθετων ερωτημάτων με πολλαπλές συνθήκες. Επιπλέον, το Firestore παρέχει ισχυρή συνέπεια δεδομένων: μετά από μια επιτυχημένη εγγραφή, όλες οι επόμενες αναγνώσεις επιστρέφουν εγγυημένα ενημερωμένα δεδομένα.

Κλιμάκωση και δομή δεδομένων

Firestore κλιμακώνεται αυτόματα έως εκατομμύρια ταυτόχρονες συνδέσεις χάρη στην πολυπεριφερειακή αρχιτεκτονική. Το Realtime Database περιορίζεται σε μία περιοχή και το πολύ 200.000 ταυτόχρονες συνδέσεις. Για έργα που σχεδιάζουν παγκόσμιο κοινό, το Firestore είναι προτιμότερο, καθώς τα δεδομένα αναπαράγονται αυτόματα μεταξύ πολλών κέντρων δεδομένων της Google.

Η δομή δεδομένων στο Firestore επιτρέπει τη δημιουργία σύνθετων ιεραρχικών μοντέλων με υποσυλλογές. Για παράδειγμα, ένας χρήστης μπορεί να έχει μια υποσυλλογή "παραγγελίες" και κάθε παραγγελία μια υποσυλλογή "προϊόντα". Στο Realtime Database, μια τέτοια βαθιά ένθεση οδηγεί σε προβλήματα απόδοσης στα ερωτήματα, καθώς φορτώνεται ολόκληρη η διαδρομή από τη ρίζα έως τον επιθυμητό κόμβο.

Πώς λειτουργεί ο συγχρονισμός δεδομένων στο Firestore

Firestore χρησιμοποιεί μια μόνιμη σύνδεση WebSocket μεταξύ πελάτη και διακομιστή για συγχρονισμό δεδομένων πραγματικού χρόνου. Όταν μια εφαρμογή εγγράφεται σε αλλαγές ενός εγγράφου ή συλλογής μέσω ενός snapshot listener, το SDK δημιουργεί ένα κανάλι επικοινωνίας μέσω του οποίου ο διακομιστής στέλνει ενημερώσεις σε κάθε αλλαγή δεδομένων. Ο πελάτης λαμβάνει μόνο τα τροποποιημένα έγγραφα, όχι ολόκληρη τη συλλογή κάθε φορά.

Ο μηχανισμός συγχρονισμού βασίζεται σε μια ροή γεγονότων: added (το έγγραφο εμφανίστηκε), modified (το έγγραφο τροποποιήθηκε) και removed (το έγγραφο διαγράφηκε). Ο προγραμματιστής μπορεί να επεξεργαστεί κάθε γεγονός ξεχωριστά, ενημερώνοντας μόνο τα αντίστοιχα στοιχεία UI. Αυτό εξασφαλίζει υψηλή απόδοση ακόμη και με χιλιάδες έγγραφα, καθώς μόνο τα τροποποιημένα στοιχεία επανασχεδιάζονται.

Offline πρόσβαση και προσωρινή αποθήκευση

Ένα από τα βασικά πλεονεκτήματα του Firestore είναι η ενσωματωμένη υποστήριξη για λειτουργία offline. Το SDK αποθηκεύει αυτόματα προσωρινά όλα τα αναγνωσμένα δεδομένα στη συσκευή και συνεχίζει να λειτουργεί απουσία δικτύου. Όταν η εφαρμογή γράφει δεδομένα σε λειτουργία offline, τοποθετούνται σε μια τοπική ουρά και αποστέλλονται στον διακομιστή όταν αποκατασταθεί η σύνδεση. Για την επίλυση συγκρούσεων χρησιμοποιείται η στρατηγική last-write-wins.

kotlin
val docRef = db.collection("cities").document("SF")

docRef.addSnapshotListener { snapshot, error ->
    if (error != null) {
        Log.w("TAG", "Σφάλμα ακρόασης", error)
        return@addSnapshotListener
    }

    if (snapshot != null && snapshot.exists()) {
        Log.d("TAG", "Τρέχοντα δεδομένα: ${snapshot.data}")
    }
}

Το μέγεθος της προσωρινής μνήμης μπορεί να διαμορφωθεί μέσω του FirestoreSettings. Από προεπιλογή χρησιμοποιούνται 100 MB, αλλά για εφαρμογές με εντατική ανάγνωση δεδομένων μπορεί να αυξηθεί. Υπάρχει επίσης λειτουργία persistent disk cache που επιβιώνει από την επανεκκίνηση της εφαρμογής. Για τη διαχείριση της διαθεσιμότητας της λειτουργίας offline, χρησιμοποιούνται οι μέθοδοι enableNetwork και disableNetwork, που επιτρέπουν την προσωρινή απενεργοποίηση της δικτυακής επικοινωνίας.

Ασφάλεια και κανόνες πρόσβασης Firestore

Firestore Security Rules είναι μια δηλωτική γλώσσα σήμανσης για τον έλεγχο πρόσβασης σε δεδομένα σε επίπεδο διακομιστή. Οι κανόνες καθορίζουν ποιος και υπό ποιες συνθήκες μπορεί να διαβάζει και να γράφει έγγραφα. Λειτουργούν πριν από την εκτέλεση του ερωτήματος και δεν απαιτούν ξεχωριστή λογική διακομιστή για εξουσιοδότηση. Οι κανόνες ελέγχονται από την πλευρά του Firebase πριν από κάθε ανάγνωση ή εγγραφή δεδομένων.

Οι κανόνες πρόσβασης βασίζονται στην αρχή της επιτρεπόμενης πρόσβασης (allow). Από προεπιλογή, όλη η πρόσβαση απαγορεύεται. Ο προγραμματιστής ανοίγει σταδιακά την πρόσβαση για συγκεκριμένες λειτουργίες (read, write, create, update, delete) υπό ορισμένες συνθήκες. Οι συνθήκες μπορούν να ελέγξουν την αυθεντικοποίηση χρήστη μέσω του request.auth, τα δεδομένα ερωτήματος μέσω του request.resource και τα υπάρχοντα δεδομένα μέσω του resource.

js
// Κανόνες πρόσβασης Firestore
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Ο χρήστης διαβάζει και γράφει μόνο τα δικά του δεδομένα
    match /users/{userId} {
      allow read, write: if
          request.auth != null &&
          request.auth.uid == userId;
    }

    // Οποιοσδήποτε αυθεντικοποιημένος χρήστης μπορεί να διαβάσει αναρτήσεις
    match /posts/{postId} {
      allow read: if request.auth != null;
      allow create: if request.auth != null
          && request.resource.data.author == request.auth.uid;
    }
  }
}

Επικύρωση δεδομένων μέσω κανόνων

Εκτός από τον έλεγχο πρόσβασης, το Security Rules επιτρέπει την επικύρωση της δομής και των τύπων των εγγεγραμμένων δεδομένων. Για παράδειγμα, μπορεί να ελεγχθεί εάν το πεδίο email ταιριάζει με μια κανονική έκφραση ή εάν η ηλικία δεν υπερβαίνει τα 120 έτη. Η επικύρωση πραγματοποιείται πριν από την εγγραφή, αποτρέποντας την αποθήκευση εσφαλμένων δεδομένων στον διακομιστή. Για τον έλεγχο πεδίων χρησιμοποιείται το αντικείμενο request.resource.data που περιέχει ολόκληρο το έγγραφο που πρόκειται να γραφεί.

Το Firestore υποστηρίζει επίσης συλλογές που είναι διαθέσιμες μόνο για εγγραφή διακομιστή μέσω του Admin SDK, χωρίς πρόσβαση από την πλευρά των πελατών. Αυτό είναι βολικό για αποθήκευση πληροφοριών υπηρεσίας, κλειδιών API και διαμορφώσεων που δεν πρέπει να είναι ορατά στους χρήστες. Γι' αυτό, στους κανόνες αρκεί να απαγορευτούν όλες οι λειτουργίες πελάτη στις σχετικές συλλογές, επιτρέποντας την πρόσβαση μόνο μέσω του Admin SDK από την πλευρά του διακομιστή.

Παράδειγμα χρήσης Firebase Firestore στο Android

Ας εξετάσουμε ένα παράδειγμα ενσωμάτωσης του Firestore σε μια εφαρμογή Android για τη δημιουργία λίστας εργασιών (todo). Η εφαρμογή θα διαβάζει εργασίες σε πραγματικό χρόνο, θα προσθέτει νέες και θα σημειώνει τις ολοκληρωμένες. Για ασύγχρονη εργασία χρησιμοποιούνται διεπαφές callback Firebase και coroutine Kotlin.

Ρύθμιση Firebase και προσθήκη εξαρτήσεων

Πριν ξεκινήσετε, πρέπει να συνδέσετε το έργο σας στο Firebase μέσω του Firebase Console και να προσθέσετε το αρχείο google-services.json στην ενότητα της εφαρμογής. Στη συνέχεια, στο build.gradle προστίθεται η εξάρτηση firebase-firestore-ktx και το πρόσθετο google-services. Η έκδοση της βιβλιοθήκης πρέπει να αντιστοιχεί στην τρέχουσα έκδοση BoM Firebase για συμβατότητα όλων των στοιχείων Firebase μεταξύ τους.

groovy
dependencies {
    // Firebase BoM — διαχείριση εκδόσεων
    implementation platform("com.google.firebase:firebase-bom:33.0.0")
    implementation "com.google.firebase:firebase-firestore-ktx"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0"
}

Μετά τη ρύθμιση, δημιουργείται το μοντέλο δεδομένων Task και το αποθετήριο για εργασία με το Firestore. Το μοντέλο περιέχει πεδία id, title, isCompleted και timestamp. Το Firestore σειριοποιεί αυτόματα το data class σε ένα έγγραφο, χρησιμοποιώντας τα ονόματα πεδίων ως κλειδιά. Για ανάγνωση δεδομένων χρησιμοποιείται ένας snapshot listener που επιστρέφει ένα Flow μέσω της επέκτασης snapshotFlow.

kotlin
data class Task(
    val id: String = "",
    val title: String = "",
    val isCompleted: Boolean = false,
    val createdAt: Timestamp? = null
)

class TaskRepository {
    private val tasksRef = FirebaseFirestore
        .getInstance()
        .collection("tasks")

    fun getTasks(): Flow<List<Task>> = tasksRef
        .orderBy("createdAt", Query.Direction.DESCENDING)
        .snapshotFlow()
        .map { snapshot ->
            snapshot?.toObjects(Task::class.java) ?: emptyList()
        }

    suspend fun addTask(title: String) {
        tasksRef.add(Task(title = title))
    }
}

Το view-model εγγράφεται στο Flow από το αποθετήριο και μεταβιβάζει τη λίστα εργασιών στο επίπεδο UI. Κατά την προσθήκη μιας νέας εργασίας, καλείται η suspend-συνάρτηση του αποθετηρίου μέσω του coroutine scope. Το Firestore συγχρονίζει αυτόματα τις αλλαγές μεταξύ όλων των πελατών: εάν ένας χρήστης προσθέσει μια εργασία, οι άλλοι τη βλέπουν σε πραγματικό χρόνο χωρίς επαναφόρτωση της οθόνης.

Συχνές Ερωτήσεις

Σε τι διαφέρει το Firebase Firestore από μια συνηθισμένη βάση SQL;

Firestore είναι μια βάση NoSQL με ευέλικτο σχήμα χωρίς πίνακες και ερωτήματα JOIN. Τα δεδομένα αποθηκεύονται σε συλλογές εγγράφων, όχι σε γραμμές πινάκων. Σε αντίθεση με την SQL, το Firestore δεν απαιτεί εκ των προτέρων ορισμό σχήματος και κλιμακώνεται αυτόματα χωρίς μεταναστεύσεις, αλλά δεν υποστηρίζει σύνθετα συναλλακτικά ερωτήματα μεταξύ συλλογών.

Πόσο κοστίζει η χρήση του Firebase Firestore;

Firestore έχει γενναιόδωρο δωρεάν όριο (πρόγραμμα Spark): 50.000 αναγνώσεις, 20.000 εγγραφές και 20.000 διαγραφές την ημέρα. Μετά την υπέρβαση, χρησιμοποιείται το πρόγραμμα Blaze με πληρωμή ανάλογα με τη χρήση: 0,06 $ ανά 100.000 αναγνώσεις και 0,18 $ ανά 100.000 εγγραφές. Η τιμή εξαρτάται από την περιοχή και τον όγκο των μεταφερόμενων δεδομένων.

Πώς χειρίζεται το Firestore τις συγκρούσεις δεδομένων;

Firestore χρησιμοποιεί τη στρατηγική last-write-wins για την επίλυση συγκρούσεων: η τελευταία εγγραφή σε ένα έγγραφο αντικαθιστά πλήρως την προηγούμενη. Για πιο λεπτομερή έλεγχο, είναι διαθέσιμες συναλλαγές (ατομικές λειτουργίες ανάγνωσης-εγγραφής) και μαζικές εγγραφές που εγγυώνται ακεραιότητα σε λειτουργίες σε πολλαπλά έγγραφα.

Μπορούν να μεταναστευθούν δεδομένα από το Firebase Firestore;

Ναι, το Firestore υποστηρίζει εξαγωγή και εισαγωγή δεδομένων μέσω του Firebase Console ή του gcloud CLI. Η εξαγωγή γίνεται σε μορφή Cloud Firestore Export και αποθηκεύεται στο Google Cloud Storage. Τα δεδομένα μπορούν να μεταναστευθούν μεταξύ έργων Firebase ή να ληφθούν για ανάλυση στο BigQuery και άλλα εργαλεία.

Υποστηρίζει το Firestore αναζήτηση πλήρους κειμένου;

Firestore δεν διαθέτει ενσωματωμένη αναζήτηση πλήρους κειμένου. Για αυτήν την εργασία, η Google συνιστά ενσωμάτωση με Algolia ή Meilisearch, ή χρήση του Cloud Functions με Elasticsearch. Τα ενσωματωμένα ερωτήματα του Firestore υποστηρίζουν μόνο έλεγχο ισότητας, εύρους και ύπαρξης πεδίου χωρίς αναζήτηση υποσυμβολοσειράς.

Περίληψη

  • Firebase Firestore είναι μια cloud NoSQL βάση δεδομένων πραγματικού χρόνου με συλλογές και έγγραφα που κλιμακώνεται αυτόματα υπό φόρτο.
  • Ο ενσωματωμένος συγχρονισμός μέσω WebSocket εξασφαλίζει ενημέρωση δεδομένων σε όλους τους πελάτες χωρίς χειροκίνητη αναζήτηση διακομιστή.
  • Η offline πρόσβαση με προσωρινή αποθήκευση επιτρέπει στην εφαρμογή να λειτουργεί πλήρως χωρίς διαδίκτυο και να συγχρονίζεται αυτόματα όταν αποκατασταθεί το δίκτυο.
  • Σε σύγκριση με το Realtime Database, το Firestore προσφέρει πιο σύνθετα ερωτήματα, ισχυρή συνέπεια και πολυπεριφερειακή ανάπτυξη.
  • Η ασφάλεια δεδομένων διασφαλίζεται από δηλωτικούς Security Rules που ελέγχουν την πρόσβαση και επικυρώνουν δεδομένα στην πλευρά του διακομιστή.
  • Η ενσωμάτωση με το Firebase Authentication και το Cloud Functions επιτρέπει τη δημιουργία πλήρους εφαρμογής διακομιστή χωρίς δική σας υποδομή.
  • Για νέα έργα, το Firestore συνιστάται από την Google ως η κύρια βάση δεδομένων πραγματικού χρόνου, αντικαθιστώντας την παλαιότερη Realtime Database.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης