Firebase Firestore — τι είναι, έγγραφα και συλλογές NoSQL

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

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

Κύρια σημεία

  • Firestore — NoSQL βάση δεδομένων εγγράφων με υποστήριξη ερωτημάτων, ευρετηρίων και συναλλαγών.
  • Ο συγχρονισμός δεδομένων λειτουργεί σε πραγματικό χρόνο μέσω WebSocket — οι αλλαγές στον διακομιστή παραδίδονται άμεσα σε όλους τους πελάτες.
  • Το Firestore υποστηρίζει offline λειτουργία — τα δεδομένα αποθηκεύονται προσωρινά τοπικά και συγχρονίζονται κατά την αποκατάσταση της σύνδεσης.
  • Αυτόματη κλιμάκωση έως εκατομμύρια ταυτόχρονες συνδέσεις χωρίς διαμόρφωση sharding ή αναπαραγωγής.
  • Οι κανόνες ασφαλείας Security Rules επιτρέπουν τη διαχείριση πρόσβασης στα δεδομένα χωρίς κώδικα διακομιστή.

Τι είναι το Firebase Firestore

Το Firebase Firestore είναι μια cloud NoSQL βάση δεδομένων που κυκλοφόρησε από την Google το 2019 ως διάδοχος του Realtime Database. Το Firestore είναι χτισμένο στην υποδομή των Google Cloud Spanner και Google Cloud Datastore, παρέχοντας αυστηρή συνέπεια δεδομένων εντός μιας συναλλαγής και αυτόματη πολυπεριφερειακή αναπαραγωγή. Το SDK υποστηρίζει Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform και Unity.

Εξέλιξη από το Realtime Database

Το Firestore ανακοινώθηκε στο Google I/O 2017 ως “Cloud Firestore” — μια λύση που εξαλείφει τους βασικούς περιορισμούς του Realtime Database: έλλειψη υποστήριξης για σύνθετα ερωτήματα, αδυναμία κλιμάκωσης δεδομένων σε πολλαπλούς κόμβους και ασθενή συνέπεια. Σύμφωνα με δεδομένα της Google (2026), το Firestore επεξεργάζεται πάνω από 1 τρισεκατομμύριο ερωτήματα την ημέρα και είναι η προεπιλεγμένη βάση δεδομένων για το 80% των νέων έργων Firebase. Ωστόσο, το Realtime Database παραμένει σχετικό για σενάρια με εξαιρετικά χαμηλή καθυστέρηση (παιχνίδια, συνεργατική επεξεργασία) χάρη στην απλή δομή JSON.

Δωρεάν όρια του Firestore

Το Firestore προσφέρεται με μοντέλο pay-as-you-go με γενναιόδωρο δωρεάν όριο στο πακέτο Spark: 1 GB αποθήκευσης, 10 GB κίνησης δικτύου ανά μήνα, 50 χιλιάδες λειτουργίες ανάγνωσης, 20 χιλιάδες λειτουργίες εγγραφής και 20 χιλιάδες λειτουργίες διαγραφής ανά ημέρα. Στο πακέτο Blaze όλα είναι εξίσου δωρεάν, και οι υπερβάσεις χρεώνονται: $0.06 ανά 100 χιλιάδες λειτουργίες ανάγνωσης, $0.18 ανά 100 χιλιάδες λειτουργίες εγγραφής. Σύμφωνα με δεδομένα της Google (2026), το 90% των έργων δεν υπερβαίνει το δωρεάν όριο.

Μοντέλο δεδομένων: συλλογές, έγγραφα και πεδία

Το μοντέλο δεδομένων του Firestore είναι οργανωμένο ιεραρχικά: η ρίζα περιέχει συλλογές, κάθε συλλογή περιέχει έγγραφα, κάθε έγγραφο περιέχει πεδία (πρωτόγονοι τύποι, πίνακες, Map) και ένθετες συλλογές (subcollections). Το βάθος ένθεσης των συλλογών δεν είναι περιορισμένο, αλλά ένα έγγραφο δεν μπορεί να περιέχει απευθείας άλλο έγγραφο — μόνο μέσω αναφοράς (Reference type).

Συλλογές και έγγραφα

Η συλλογή είναι ένα δοχείο εγγράφων με αυτόματα δημιουργούμενα ή καθορισμένα αναγνωριστικά. Κάθε έγγραφο είναι ένα αντικείμενο που μοιάζει με JSON, με μέγεθος έως 1 MiB. Τα πεδία ενός εγγράφου μπορούν να είναι συμβολοσειρές, αριθμοί, λογικές τιμές, πίνακες, Map, χρονικές σημάνσεις (Timestamp), γεωγραφικά σημεία (GeoPoint) και αναφορές σε άλλα έγγραφα (Reference). Το μέγεθος του εγγράφου περιορίζεται σε 1 MiB, συμπεριλαμβανομένων των ονομάτων όλων των πεδίων.

Τύπος πεδίου FirestoreΠαράδειγμαΔημιουργεί ευρετήριο
String“user@example.com”Ναι
Number42, 3.14Ναι
Booleantrue, falseΝαι
Array[1, 2, 3]Μόνο contains
Map{“ένθετο”: “τιμή”}Ναι (ανά κλειδί)
Timestamp2026-07-03T12:00:00ZΝαι
Referenceusers/user123Ναι

Μαζική εγγραφή και συναλλαγές

Το Firestore υποστηρίζει ατομικές συναλλαγές σε επίπεδο βάσης δεδομένων. Μια συναλλαγή μπορεί να διαβάζει και να γράφει πολλά έγγραφα — το Commit εφαρμόζει ατομικά όλες τις αλλαγές ή καμία. Μέγιστο 500 λειτουργίες ανά συναλλαγή, χρονικό όριο 60 δευτερόλεπτα. Η μαζική εγγραφή (batch write) είναι μια μη συναλλακτική ατομική λειτουργία εγγραφής χωρίς στάδιο ανάγνωσης. Οι συναλλαγές είναι κρίσιμες για χρηματοοικονομικές λειτουργίες, κρατήσεις θέσεων και απογραφή.

Σύγκριση Firestore και Realtime Database

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

Βασικές διαφορές

Το Realtime Database αποθηκεύει δεδομένα σε ένα ενιαίο δέντρο JSON, το οποίο είναι βολικό για απλές δομές, αλλά δυσχεραίνει την κλιμάκωση σε ένθεση βαθύτερη από 3 επίπεδα. Το Firestore χρησιμοποιεί το μοντέλο συλλογής-εγγράφου με αυτόματο sharding, επιτρέποντας κλιμάκωση έως εκατομμύρια έγγραφα χωρίς υποβάθμιση απόδοσης. Σύμφωνα με δεδομένα της Google (2026), το Firestore υποστηρίζει έως 10 χιλιάδες ταυτόχρονες συνδέσεις σε μία συλλογή χωρίς απώλεια ταχύτητας, το Realtime Database — έως 200 χιλιάδες συνδέσεις σε μία παρουσία.

Τιμολόγηση

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

Σύσταση Google (2026): χρησιμοποιήστε το Firestore ως προεπιλεγμένη βάση δεδομένων για νέα έργα, και το Realtime Database — για παιχνίδια και εφαρμογές όπου η ελάχιστη καθυστέρηση (κάτω από 50 ms) είναι κρίσιμη και η δομή δεδομένων είναι επίπεδη. Και οι δύο βάσεις δεδομένων μπορούν να λειτουργούν ταυτόχρονα σε ένα έργο.

Ερωτήματα, ευρετήρια και σελιδοποίηση στο Firestore

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

Τύποι ερωτημάτων

Το Firestore υποστηρίζει φιλτράρισμα σε ένα ή περισσότερα πεδία (equality, range, in, array-contains, array-contains-any), ταξινόμηση αύξουσα και φθίνουσα, όριο και δροδείκτες για σελιδοποίηση. Περιορισμοί: σύνθετα ερωτήματα με φιλτράρισμα σε διαφορετικά πεδία (where price > 10 AND where category == “books”) απαιτούν σύνθετο ευρετήριο; τα ερωτήματα OR απαγορεύονται (χρησιμοποιείται in και array-contains-any) και ερωτήματα με ανισότητα σε διαφορετικά πεδία απαγορεύονται.

kotlin
data class Product(
    val name: String = "",
    val category: String = "",
    val price: Double = 0.0,
    val inStock: Boolean = false
)

suspend fun FirestoreRepository.queryProducts(): List<Product> {
    return firestore
        .collection("products")
        .whereEqualTo("category", "electronics")
        .whereGreaterThanOrEqualTo("price", 100.0)
        .whereLessThan("price", 500.0)
        .orderBy("price")
        .limit(20)
        .get()
        .await()
        .toObjects(Product::class.java)
}

Αυτόματα και σύνθετα ευρετήρια

Το Firestore δημιουργεί αυτόματα ευρετήρια για μεμονωμένα πεδία — τα ερωτήματα σε ένα πεδίο λειτουργούν χωρίς καμία διαμόρφωση. Για ερωτήματα με δύο ή περισσότερα πεδία (φιλτράρισμα + ταξινόμηση) δημιουργούνται σύνθετα ευρετήρια. Κατά την πρώτη αποστολή ερωτήματος, το Firestore επιστρέφει σφάλμα με σύνδεσμο προς την κονσόλα, όπου το ευρετήριο μπορεί να δημιουργηθεί με ένα κλικ. Μέγιστο 200 σύνθετα ευρετήρια ανά βάση δεδομένων. Τα ευρετήρια μπορούν να εξαχθούν και να εισαχθούν μέσω firebase CLI.

Ενσωμάτωση Firestore σε Android

Η σύνδεση του Firestore σε μια εφαρμογή Android γίνεται τυπικά μέσω Firebase BOM. Μετά την προσθήκη της εξάρτησης firebase-firestore-ktx, το αντικείμενο FirebaseFirestore είναι διαθέσιμο μέσω getInstance() — χωρίς πρόσθετα κλειδιά ή κωδικούς. Το Firestore χρησιμοποιεί το ίδιο έργο Firebase με τις υπόλοιπες υπηρεσίες.

groovy
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-firestore-ktx")
}

// Αρχικοποίηση
val db = FirebaseFirestore.getInstance()

Ανάγνωση και εγγραφή δεδομένων

Το Firestore παρέχει δύο τρόπους ανάγνωσης: μία φορά (get) και σε πραγματικό χρόνο (addSnapshotListener). Η ανάγνωση μία φορά λαμβάνει το έγγραφο μία φορά — χρήσιμο για ρυθμίσεις και διαμόρφωση. Ο ακροατής εγγράφεται σε αλλαγές — οποιαδήποτε ενημέρωση εγγράφου παραδίδει αυτόματα ενημερωμένα δεδομένα σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο. Η set() δημιουργεί ή αντικαθιστά ένα έγγραφο, η update() αλλάζει μόνο τα καθορισμένα πεδία χωρίς να αντικαθιστά ολόκληρο το έγγραφο.

Σύμφωνα με δεδομένα της Google (2026), οι εφαρμογές μεσαίου μεγέθους (100 χιλιάδες DAU) με Firestore σε πραγματικό χρόνο καταναλώνουν περίπου 5-10 GB εξερχόμενης κίνησης ανά μήνα. Η χρήση της προσωρινής μνήμης offline (Persistence Cache) μειώνει τον όγκο των επαναλαμβανόμενων λήψεων κατά 60-70%, καθώς το SDK κατεβάζει μόνο τα τροποποιημένα έγγραφα κατά την αποκατάσταση της σύνδεσης.

Offline λειτουργία

To Persistence Cache είναι ένας ενσωματωμένος μηχανισμός του Firestore για εργασία χωρίς διαδίκτυο. Το SDK αποθηκεύει αυτόματα στην προσωρινή μνήμη όλα τα διαβασμένα έγγραφα στη συσκευή (έως 500 MiB σε Android). Κατά την απώλεια σύνδεσης, η ανάγνωση συνεχίζεται από την προσωρινή μνήμη, η εγγραφή μπαίνει σε ουρά. Κατά την αποκατάσταση της σύνδεσης, όλες οι εκκρεμείς λειτουργίες αποστέλλονται στον διακομιστή και η προσωρινή μνήμη συγχρονίζεται με τον διακομιστή. Για τον έλεγχο συγκρούσεων χρησιμοποιούνται τα snapshot-metadata.hasPendingWrites και setOptions(ServerTimestampBehavior).

Κανόνες ασφαλείας και επικύρωση δεδομένων

Οι Security Rules είναι μια δηλωτική γλώσσα για τον περιορισμό πρόσβασης στο Firestore, η οποία εκτελείται στον διακομιστή Google πριν από κάθε λειτουργία ανάγνωσης ή εγγραφής. Οι Rules δεν απαιτούν κώδικα διακομιστή — γράφονται στην κονσόλα Firebase ή μέσω firebase CLI και ελέγχονται εκδόσεων μέσω Git. Κάθε λειτουργία ελέγχεται για συμμόρφωση με τους κανόνες, και σε περίπτωση παραβίασης επιστρέφεται σφάλμα PERMISSION_DENIED.

Δομή κανόνων

Οι κανόνες Firestore Security Rules αποτελούνται από μπλοκ match και εκφράσεις allow. Το match καθορίζει τη διαδρομή προς τη συλλογή ή το έγγραφο, το allow καθορίζει τις επιτρεπόμενες λειτουργίες (read, write, create, update, delete) και τη συνθήκη — μια έκφραση που μοιάζει με JavaScript και επιστρέφει λογική τιμή. Οι κανόνες μπορούν να ελέγχουν την ταυτοποίηση (request.auth), τα δεδομένα αιτήματος (request.resource.data), τα υπάρχοντα δεδομένα (resource.data), τον χρόνο (request.time) και τη διαδρομή (request.path).

javascript
rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth != null;
      allow write: if request.auth.uid == userId;
    }

    match /products/{productId} {
      allow read: if true;
      allow create: if request.auth.token.role == "admin";
      allow update: if resource.data.authorId == request.auth.uid;
    }
  }
}

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

Οι Security Rules υποστηρίζουν επικύρωση τύπων και τιμών στην πλευρά του διακομιστή. Μπορεί να απαγορευτεί η εγγραφή εάν η τιμή είναι αρνητική ή το όνομα είναι κενό. Όλοι οι έλεγχοι εκτελούνται στον διακομιστή Google πριν από την εγγραφή — αυτό εγγυάται τη συνέπεια δεδομένων ανεξάρτητα από τον πελάτη (Android, iOS, Web, Admin SDK). Οι Rules δεν προστατεύουν από κακόβουλο Admin SDK — εξ ορισμού παρακάμπτει τους κανόνες. Για πλήρη προστασία, χρησιμοποιήστε Transaction Functions και Firebase Extensions.

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

Ποια είναι η διαφορά μεταξύ Firestore και Realtime Database;

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

Πώς κλιμακώνεται το Firestore;

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

Μπορούν να μεταφερθούν δεδομένα από το Realtime Database στο Firestore;

Ναι, χρησιμοποιήστε το Firebase Console — η λειτουργία “Export to Firestore” μετατρέπει τη δομή JSON του Realtime Database σε συλλογές και έγγραφα Firestore με λίγα κλικ. Οι ένθετοι κόμβοι γίνονται ένθετες συλλογές.

Πώς χειρίζεται το Firestore συγκρούσεις κατά την offline εγγραφή;

Last write wins — από προεπιλογή, το Firestore χρησιμοποιεί την πολιτική “η τελευταία εγγραφή κερδίζει” για την επίλυση συγκρούσεων κατά την ταυτόχρονη εγγραφή. Για προσαρμοσμένη επεξεργασία, χρησιμοποιήστε συναλλαγές με επανάγνωση.

Πόσο δωρεάν αποθηκευτικό χώρο παρέχει το Firestore;

Δωρεάν όριο του πακέτου Spark: 1 GB αποθήκευσης, 50 χιλιάδες λειτουργίες ανάγνωσης και 20 χιλιάδες λειτουργίες εγγραφής ανά ημέρα. Αυτό είναι αρκετό για MVP και εφαρμογές με ελαφρύ φορτίο.

Περίληψη

  • Firebase Firestore — NoSQL βάση δεδομένων εγγράφων της Google με συγχρονισμό σε πραγματικό χρόνο και αυτόματη κλιμάκωση.
  • Μοντέλο δεδομένων: συλλογές → έγγραφα → πεδία (String, Number, Boolean, Array, Map, Timestamp, Reference, GeoPoint).
  • Υποστηρίζει σύνθετα ερωτήματα με φιλτράρισμα, ταξινόμηση, σελιδοποίηση και σύνθετα ευρετήρια για περίπλοκες συνθήκες.
  • Offline λειτουργία αποθηκεύει προσωρινά έως 500 MiB δεδομένων στη συσκευή με αυτόματο συγχρονισμό κατά την αποκατάσταση σύνδεσης.
  • Security Rules — γλώσσα από την πλευρά του διακομιστή για δικαιώματα πρόσβασης με επικύρωση τύπων και τιμών χωρίς σύνταξη κώδικα backend.
  • Πολυπεριφερειακή αναπαραγωγή με αυτόματη ανάκτηση σε περίπτωση αποτυχίας — τα δεδομένα είναι διαθέσιμα ακόμη και σε περίπτωση βλάβης κέντρου δεδομένων.
  • Συνιστάται για νέα έργα ως προεπιλεγμένη βάση δεδομένων, Realtime Database — για παιχνίδια και σενάρια εξαιρετικά χαμηλής καθυστέρησης.

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

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

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

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