Αποθήκευση δεδομένων στην ανάπτυξη κινητών: τι είναι, μέθοδοι και πώς λειτουργεί

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

Η αποθήκευση δεδομένων είναι μία από τις βασικές εργασίες μιας εφαρμογής κινητού, που επηρεάζει την απόδοση, την ασφάλεια και την εμπειρία χρήστη. Σε αυτό το άρθρο θα καλύψουμε τα SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore και Keychain, καθώς και μορφές σειριοποίησης (JSON, Protobuf) και βιβλιοθήκες (Gson, Moshi, kotlinx.serialization). Αυτός ο οδηγός θα βοηθήσει αρχάριους προγραμματιστές να επιλέξουν τη σωστή λύση αποθήκευσης δεδομένων. Περισσότερα στον επίσημο οδηγό Android για αποθήκευση δεδομένων.

Βασικά σημεία

  • Room (Android) και Core Data (iOS) είναι τα επίσημα ORM για εργασία με σχεσιακές βάσεις δεδομένων σε κάθε πλατφόρμα
  • SharedPreferences (Android) αντικαθίσταται από το DataStore — μια ασύγχρονη και ασφαλή τύπου αποθήκευση ζευγών κλειδιού-τιμής
  • Για ασφαλή αποθήκευση token χρησιμοποιούνται Keystore (Android) και Keychain (iOS) με προστασία υλικού
  • Firebase Firestore είναι μια βάση δεδομένων NoSQL με συγχρονισμό σε πραγματικό χρόνο και λειτουργία εκτός σύνδεσης
  • Σειριοποίηση — μετατροπή αντικειμένων σε JSON/Protobuf μέσω Gson, Moshi, kotlinx.serialization

Τοπικές βάσεις δεδομένων: SQLite, Room, Core Data, Realm

Για την αποθήκευση δομημένων δεδομένων με σχέσεις μεταξύ οντοτήτων χρησιμοποιούνται σχεσιακές βάσεις δεδομένων.

SQLite

SQLite είναι μια ενσωματωμένη σχεσιακή βάση δεδομένων που λειτουργεί σε οποιαδήποτε πλατφόρμα κινητού. Δεν απαιτεί ξεχωριστό διακομιστή, τα δεδομένα αποθηκεύονται σε ένα αρχείο. Η SQLite είναι η βάση για το Room (Android) και προαιρετικά για το Core Data (iOS). Βιβλιοθήκες: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room είναι η επίσημη βιβλιοθήκη Android Architecture Components για εργασία με SQLite. Παρέχει ένα επίπεδο ORM: Entity (πίνακας), DAO (ερωτήματα), Database (σημείο εισόδου). Το Room ελέγχει τα ερωτήματα SQL κατά τη μεταγλώττιση, υποστηρίζει coroutines και Flow και μεταφέρει αυτόματα το σχήμα.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data είναι το πλαίσιο της Apple για διαχείριση γράφου αντικειμένων. Δεν είναι καθαρή βάση δεδομένων — είναι ένα επίπεδο διατήρησης πάνω από SQLite, XML ή δυαδική αποθήκευση. Το Core Data διαχειρίζεται αντικείμενα (NSManagedObject), σχέσεις, εκδόσεις σχήματος, αναίρεση/επανάληψη και πολυνηματικότητα μέσω NSManagedObjectContext.

Realm

Realm είναι μια εναλλακτική λύση για την SQLite, σχεδιασμένη ως βάση δεδομένων κινητού υψηλής απόδοσης. Το Realm είναι ταχύτερο από την SQLite στην ανάγνωση και εγγραφή, υποστηρίζει αντιδραστικές ειδοποιήσεις (Live Objects), κρυπτογράφηση εν κινήσει και cross-platform (Android, iOS, Flutter, React Native). Μειονεκτήματα: αυξημένο μέγεθος APK/IPA και μεγαλύτερη κατανάλωση μνήμης.

Αποθήκευση κλειδιού-τιμής και ρυθμίσεις

Για την αποθήκευση μικρών ποσοτήτων δεδομένων (ρυθμίσεις, token, προσωρινή μνήμη) χρησιμοποιούνται απλές αποθηκεύσεις ζευγών κλειδιού-τιμής.

SharedPreferences (Android)

SharedPreferences είναι μια παλαιότερη αποθήκευση ζευγών κλειδιού-τιμής στο Android. Μειονεκτήματα: σύγχρονη πρόσβαση (μπλοκάρει το UI κατά την ανάγνωση), έλλειψη τύπων, κίνδυνος ANR κατά τη φόρτωση μεγάλου αρχείου. ΔΕΝ συνιστάται για νέα έργα.

DataStore (Jetpack Android)

DataStore είναι η σύγχρονη αντικατάσταση των SharedPreferences από την Google. Λειτουργεί ασύγχρονα μέσω Kotlin Coroutines και Flow, υποστηρίζει Preferences DataStore (κλειδί-τιμή) και Proto DataStore (τυποποιημένα δεδομένα μέσω Protobuf). Το DataStore είναι ασφαλές για το νήμα UI και υποστηρίζει συναλλαγές.

NSUserDefaults (iOS)

UserDefaults είναι η τυπική αποθήκευση για μικρές ρυθμίσεις στο iOS. Υποστηρίζει πρωτόγονους τύπους, συμβολοσειρές, ημερομηνίες, Data. Το UserDefaults είναι σύγχρονο, επομένως δεν είναι κατάλληλο για μεγάλους όγκους δεδομένων. Η εγγραφή τιμών μέσω register(defaults:) ορίζει προεπιλεγμένες τιμές.

Βάσεις δεδομένων cloud: Firebase Firestore και Realtime DB

Για αποθήκευση δεδομένων σε εφαρμογές που απαιτούν συγχρονισμό μεταξύ συσκευών, χρησιμοποιούνται βάσεις δεδομένων cloud Firebase.

Cloud Firestore

Firebase Firestore είναι μια βάση δεδομένων εγγράφων NoSQL με συνδρομές σε πραγματικό χρόνο, αυτόματη κλιμάκωση, ισχυρά ερωτήματα και ενσωματωμένη λειτουργία εκτός σύνδεσης. Τα δεδομένα οργανώνονται σε συλλογές και έγγραφα (δομές που μοιάζουν με JSON). Το Firestore υποστηρίζει συναλλαγές και μαζικές λειτουργίες. Ιδανικό για συνομιλίες, ροές και κοινωνικές εφαρμογές.

Firebase Realtime Database

Firebase Realtime Database είναι μια παλαιότερη βάση δεδομένων NoSQL Firebase που αποθηκεύει δεδομένα ως ένα μόνο δέντρο JSON. Απλούστερη από το Firestore αλλά λιγότερο ευέλικτη σε ερωτήματα και κλιμάκωση. Συνιστάται για απλές εφαρμογές πραγματικού χρόνου (online κατάσταση, απλές συνομιλίες).

ΧαρακτηριστικόCloud FirestoreFirebase Realtime DB
Μοντέλο δεδομένωνΣυλλογές → ΈγγραφαΔέντρο JSON
ΕρωτήματαΠολύπλοκα (φιλτράρισμα, ταξινόμηση, όρια)Απλά (κατά κλειδί)
ΚλιμάκωσηΑυτόματηΧειροκίνητη κατανομή
Λειτουργία εκτός σύνδεσηςΝαι (μόνιμη προσωρινή μνήμη)Ναι
ΤιμήΑνά λειτουργία ανάγνωσης/εγγραφήςΑνά κίνηση + αποθήκευση

Ασφαλής αποθήκευση: Keystore, Keychain και EncryptedSharedPreferences

Η αποθήκευση token, κωδικών πρόσβασης και κλειδιών κρυπτογράφησης απαιτεί ειδικές προστατευμένες αποθηκεύσεις.

Android Keystore

Android Keystore είναι μια αποθήκευση συστήματος για κρυπτογραφικά κλειδιά. Τα κλειδιά αποθηκεύονται σε περιβάλλον υλικού (TEE — Trusted Execution Environment), μη προσβάσιμο από εφαρμογές και λειτουργικό σύστημα. Υποστηρίζει δημιουργία κλειδιών, κρυπτογράφηση και υπογραφή. Android 9+ περιλαμβάνει StrongBox Keymaster (αποκλειστικό τσιπ).

iOS Keychain

Keychain Services είναι μια ασφαλής αποθήκευση iOS για κωδικούς πρόσβασης, κλειδιά και πιστοποιητικά. Τα δεδομένα κρυπτογραφούνται χρησιμοποιώντας το υλικό Secure Enclave. Το Keychain υποστηρίζει επίπεδα προσβασιμότητας: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences είναι ένα περιτύλιγμα γύρω από τα SharedPreferences με κρυπτογράφηση κλειδιών και τιμών μέσω AES256-GCM και HKDF. Υλοποιημένο στη βιβλιοθήκη AndroidX Security. Συνιστάται για αποθήκευση token και ευαίσθητων ρυθμίσεων.

Στην IT Sectr, χρησιμοποιούμε Android Keystore + EncryptedSharedPreferences για αποθήκευση token ανανέωσης και βιομετρικών κλειδιών. Στο iOS, χρησιμοποιούμε Keychain με επίπεδο kSecAttrAccessibleWhenUnlockedThisDeviceOnly για μέγιστη ασφάλεια.

Αποθήκευση αρχείων: Internal, External, Cache Directory

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

Android Storage

Το Android διακρίνει μεταξύ Internal Storage (/data/data/πακέτο/ — ιδιωτική αποθήκευση) και External Storage (κάρτα SD ή εξομοιωμένο διαμέρισμα). Το Cache Directory είναι προσωρινή αποθήκευση που το σύστημα μπορεί να καθαρίσει. Το Scoped Storage (Android 10+) περιορίζει την πρόσβαση στο External Storage — οι εφαρμογές βλέπουν μόνο τα δικά τους αρχεία ή αρχεία μέσω MediaStore/SAF.

iOS Storage

Το iOS παρέχει Documents Directory (αντίγραφο ασφαλείας iCloud, μόνιμα δεδομένα), Library/Caches (προσωρινά αρχεία, χωρίς αντίγραφο ασφαλείας) και Tmp Directory (προσωρινά, μπορούν να καθαριστούν). Χρησιμοποιήστε το NSFileManager για εργασία με το σύστημα αρχείων. iOS 11+ υποστηρίζει File Provider για αρχεία cloud.

Σειριοποίηση δεδομένων: JSON, Protobuf και βιβλιοθήκες

Η σειριοποίηση μετατρέπει αντικείμενα σε μορφή για μετάδοση ή αποθήκευση. Η αποσειριοποίηση είναι η αντίστροφη διαδικασία.

Μορφές

JSON (JavaScript Object Notation) είναι η πιο δημοφιλής μορφή: αναγνώσιμη, ευέλικτη, υποστηρίζεται από όλες τις πλατφόρμες. XML είναι πιο αυστηρή, χρησιμοποιείται σε παλαιότερα συστήματα. Protobuf (Protocol Buffers) είναι μια δυαδική μορφή από την Google: 3-10 φορές πιο συμπαγής από JSON, ταχύτερη ανάλυση, με αυστηρό σχήμα. Χρησιμοποιείται για συστήματα υψηλού φορτίου και μικροϋπηρεσίες.

Βιβλιοθήκες Android

  • Gson (Google) — απλό, ευέλικτο, αλλά αργό. Λειτουργεί αυτόματα με αντικείμενα Java/Kotlin
  • Moshi (Square) — ταχύτερο από το Gson, καλύτερη υποστήριξη Kotlin (ιδιότητες μη null, προεπιλεγμένες τιμές, sealed κλάσεις)
  • kotlinx.serialization — εγγενής σειριοποίηση Kotlin από τη JetBrains, λειτουργεί κατά τη μεταγλώττιση, υποστηρίζει JSON, Protobuf, CBOR

Βιβλιοθήκες iOS

JSONSerialization είναι το ενσωματωμένο API για εργασία με JSON. Codable (Encodable/Decodable) είναι ένα σύγχρονο πρωτόκολλο Swift για αυτόματη σειριοποίηση σε JSON, Property List και άλλες μορφές.

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

Λύσεις cross-platform: Hive, ObjectBox, Drift

Για Flutter και React Native υπάρχουν δικές τους αποτελεσματικές βιβλιοθήκες αποθήκευσης.

Hive (Flutter)

Hive είναι μια ελαφριά, γρήγορη αποθήκευση κλειδιού-τιμής για Flutter. Δεν απαιτεί εγγενή κώδικα (καθαρό Dart), υποστηρίζει τύπους μέσω TypeAdapter και λειτουργεί σε απομονωτές. Ιδανικό για προσωρινή μνήμη, ρυθμίσεις και μικρούς όγκους δεδομένων.

ObjectBox

ObjectBox είναι μια ενσωματωμένη βάση δεδομένων υψηλής απόδοσης για Flutter, Android και iOS. Είναι 10+ φορές ταχύτερη από την SQLite, χρησιμοποιεί επίπεδη δομή αρχείων για ελάχιστη επιβάρυνση. Υποστηρίζει σχέσεις, ερωτήματα και αντιδραστικές συνδρομές (ObjectBox Dart).

Drift (πρώην Moor)

Drift είναι μια αντιδραστική βιβλιοθήκη SQLite για Flutter και Dart. Παρέχει ασφαλή ερωτήματα τύπου, μεταναστεύσεις, λειτουργίες DAO και υποστήριξη Stream (αντιδραστικές ενημερώσεις). Το Drift είναι η κύρια επιλογή για έργα Flutter που απαιτούν SQLite.

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

Τι είναι καλύτερο για τοπική αποθήκευση δεδομένων: Room ή Core Data;

Η επιλογή εξαρτάται από την πλατφόρμα: Room (Android) είναι η επίσημη βιβλιοθήκη βασισμένη σε SQLite με έλεγχο ερωτημάτων κατά τη μεταγλώττιση. Core Data (iOS) είναι το πλαίσιο της Apple με γράφο αντικειμένων. Για έργα cross-platform, το Realm ή η SQLite μέσω ORM είναι κατάλληλα.

Ποια είναι η διαφορά μεταξύ SharedPreferences και DataStore;

Τα SharedPreferences είναι παλιά υλοποίηση με σύγχρονη πρόσβαση και κίνδυνο ANR. DataStore (Jetpack) είναι μια σύγχρονη αντικατάσταση βασισμένη σε Kotlin Coroutines και Flow, που υποστηρίζει ασύγχρονη λειτουργία, τύπους και προστασία σφαλμάτων.

Πώς να αποθηκεύσετε με ασφάλεια token και κωδικούς πρόσβασης σε μια εφαρμογή κινητού;

Android: EncryptedSharedPreferences ή Android Keystore. iOS: Keychain Services με προσβασιμότητα WhenUnlockedThisDeviceOnly. Για κρίσιμα δεδομένα, χρησιμοποιήστε Secure Enclave (iOS) και υλικό Keystore (Android) με βιομετρικά.

Τι είναι το Firebase Firestore και πότε πρέπει να χρησιμοποιείται;

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

Ποια ORM υπάρχουν για Flutter και React Native;

Flutter: Hive (γρήγορο κλειδί-τιμή), Floor (ORM SQLite), Drift (Moor, αντιδραστική SQLite), ObjectBox (ενσωματωμένη βάση δεδομένων υψηλής απόδοσης). React Native: Realm, WatermelonDB (τεμπέλικη φόρτωση) και AsyncStorage (ανάλογο SharedPreferences).

Περίληψη

  • Room (Android) και Core Data (iOS) είναι οι επίσημες λύσεις για σχεσιακές βάσεις δεδομένων σε κάθε πλατφόρμα
  • DataStore αντικαθιστά τα SharedPreferences για ασύγχρονη αποθήκευση ρυθμίσεων
  • Keystore / Keychain είναι υποχρεωτικά για ασφαλή αποθήκευση token και κλειδιών
  • Firebase Firestore είναι η καλύτερη επιλογή για συγχρονισμό σε πραγματικό χρόνο μεταξύ συσκευών
  • Kotlinx.serialization (Android) και Codable (iOS) είναι σύγχρονες προσεγγίσεις σειριοποίησης
  • Για Flutter: Drift (SQLite), Hive (κλειδί-τιμή), ObjectBox (υψηλή απόδοση)
  • Realm είναι μια εναλλακτική cross-platform για την SQLite με αντιδραστικές ειδοποιήσεις

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

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

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