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

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

Η μόνιμη αποθήκευση δεδομένων εξασφαλίζει τη διατήρηση των πληροφοριών του χρήστη μεταξύ των συνεδριών λειτουργίας της εφαρμογής κινητού. Χωρίς αυτήν την τεχνολογία, κάθε εκτέλεση του προγράμματος θα ξεκινούσε από το μηδέν — οι ρυθμίσεις, το ιστορικό και τα ληφθέντα αρχεία θα χάνονταν κατά το κλείσιμο. Σύμφωνα με δεδομένα των Google Developers, 2024, περισσότερες από το 90% των εφαρμογών κινητών χρησιμοποιούν τουλάχιστον έναν μηχανισμό μόνιμης αποθήκευσης για τη διατήρηση δεδομένων χρήστη και κατάστασης διεπαφής.

Κύρια σημεία

  • Data Persistence — μηχανισμοί αποθήκευσης δεδομένων μεταξύ συνεδριών εφαρμογής
  • SharedPreferences — αποθήκευση απλών ζευγών κλειδιού-τιμής σε Android
  • SQLite — ενσωματωμένη σχεσιακή βάση δεδομένων για κινητές συσκευές
  • Room — επίπεδο ORM πάνω από SQLite από την Google για Android
  • Core Data — πλαίσιο διαχείρισης αντικειμένων σε iOS και macOS

Τι είναι η μόνιμη αποθήκευση δεδομένων

Data Persistence — η ικανότητα της εφαρμογής να αποθηκεύει δεδομένα στη μη πτητική μνήμη της συσκευής. Στην κινητή ανάπτυξη, η μόνιμη αποθήκευση περιλαμβάνει βάσεις δεδομένων, σύστημα αρχείων, ρυθμίσεις και προσωρινή μνήμη. Κάθε μηχανισμός έχει τα δικά του χαρακτηριστικά απόδοσης, ασφάλειας και όγκου αποθηκευμένων πληροφοριών.

Προσωρινά και μόνιμα δεδομένα

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

Κριτήρια επιλογής μηχανισμού αποθήκευσης

Κατά την επιλογή τρόπου αποθήκευσης, ο προγραμματιστής αξιολογεί διάφορους παράγοντες. Ο τύπος δεδομένων καθορίζει τη δομή αποθήκευσης: απλές ρυθμίσεις — SharedPreferences ή DataStore, δομημένες εγγραφές — SQLite ή Room, αρχεία — File Storage. Ο όγκος δεδομένων επηρεάζει την απόδοση: οι βάσεις δεδομένων είναι βελτιστοποιημένες για χιλιάδες εγγραφές, ενώ τα αρχεία για μεγάλα δυαδικά αντικείμενα. Η ασφάλεια απαιτεί κρυπτογράφηση ευαίσθητων πληροφοριών μέσω EncryptedSharedPreferences ή SQLCipher.

kotlin
data class StorageOption(
    name: String,
    dataType: StorageType,
    capacity: Long,
    secure: Boolean
)

enum class StorageType {
    KEY_VALUE,
    RELATIONAL,
    FILE
}

SharedPreferences και DataStore

SharedPreferences — ο κλασικός τρόπος αποθήκευσης ζευγών κλειδιού-τιμής σε Android. Αυτό το API υπάρχει από τις πρώτες εκδόσεις της πλατφόρμας και υποστηρίζει πρωτόγονους τύπους: συμβολοσειρές, αριθμούς, λογικές τιμές. Τα δεδομένα αποθηκεύονται σε αρχείο XML στον ιδιωτικό κατάλογο της εφαρμογής και είναι προσβάσιμα μόνο στη διεργασία της.

Το DataStore ως εναλλακτική

Το Jetpack DataStore — η σύγχρονη αντικατάσταση του SharedPreferences, χτισμένο πάνω σε Kotlin Coroutines και Flow. Το DataStore προσφέρει δύο παραλλαγές: Preferences DataStore για απλές τιμές και Proto DataStore για τυποποιημένα αντικείμενα. Σε αντίθεση με το SharedPreferences, το DataStore εγγυάται τη συνέπεια δεδομένων κατά την ταυτόχρονη πρόσβαση και υποστηρίζει ασύγχρονες λειτουργίες χωρίς αποκλεισμό του κύριου νήματος.

kotlin
// SharedPreferences — παραδοσιακός τρόπος
val prefs = context
    .getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
    putString("username", "john_doe")
    putInt("score", 1500)
    apply()
}

// DataStore — ασύγχρονη προσέγγιση
val settingsDataStore = context
    .createDataStore("settings.pb")

val usernameFlow: Flow<String> = settingsDataStore
    .data
    .map { it[USERNAME_KEY] ?: "" }

Στο iOS, το αντίστοιχο του SharedPreferences είναι το UserDefaults — ένα σύστημα αποθήκευσης απλών τιμών σε μορφή Property List. Το UserDefaults χρησιμοποιεί σύγχρονη πρόσβαση και είναι κατάλληλο για μικρούς όγκους δεδομένων διαμόρφωσης, αλλά δεν συνιστάται για αποθήκευση ευαίσθητων πληροφοριών.

SQLite σε εφαρμογές κινητών

SQLite — ενσωματωμένη σχεσιακή βάση δεδομένων που λειτουργεί εντός της διεργασίας της εφαρμογής χωρίς ξεχωριστό διακομιστή. Είναι το πιο διαδεδομένο DBMS στην κινητή ανάπτυξη: χρησιμοποιείται προεπιλεγμένα και στις δύο πλατφόρμες. Το Android περιλαμβάνει την SQLite στο SDK, και το iOS στη βιβλιοθήκη libsqlite3. Η SQLite υποστηρίζει τυπική SQL, συναλλαγές, ευρετήρια και ενεργοποιητές.

Δημιουργία πίνακα και λειτουργίες CRUD

Η εργασία με την SQLite ξεκινά με τη δημιουργία σχήματος βάσης δεδομένων. Ο προγραμματιστής ορίζει πίνακες, τα πεδία και τους τύπους τους, και στη συνέχεια εκτελεί λειτουργίες εισαγωγής, ανάγνωσης, ενημέρωσης και διαγραφής. Το SQLiteOpenHelper στο Android διαχειρίζεται τη δημιουργία και τις μεταναστεύσεις της βάσης δεδομένων, ενώ στο iOS χρησιμοποιείται η διεπαφή C ή το περιτύλιγμα FMDB.

kotlin
// SQLiteOpenHelper στο Android
class DBHelper(context: Context) :
    SQLiteOpenHelper(context, "app.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("""
            CREATE TABLE users (
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL,
                email TEXT UNIQUE
            )
        """)
    }

    fun insertUser(name: String, email: String) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("email", email)
        }
        db.insert("users", null, values)
    }
}
Τύπος δεδομένωνSharedPreferencesSQLiteΣύστημα αρχείων
Τύποςκλειδί-τιμήσχεσιακή ΒΔδυαδικά αρχεία
Όγκοςεκατοντάδες εγγραφέςχιλιάδες εγγραφέςδιαθέσιμος χώρος
Απόδοσηυψηλήμέτριαεξαρτάται από το μέγεθος
Τυπική χρήσηρυθμίσειςδομημένα δεδομέναεικόνες, βίντεο

Room — ORM για Android

Room — βιβλιοθήκη από τη σουίτα Jetpack, που παρέχει ένα επίπεδο ORM πάνω από την SQLite. Το Room εξαλείφει τη ρουτίνα γραφής SQL ερωτημάτων και ContentValues, αντικαθιστώντας τα με σχολιασμούς και συναρτήσεις Kotlin. Ο μεταγλωττιστής του Room δημιουργεί την υλοποίηση DAO (Data Access Object) στο στάδιο της μεταγλώττισης, εξαλείφοντας σφάλματα στη σύνταξη SQL.

Διαμόρφωση Room στο έργο

Για να συνδεθεί το Room, πρέπει να προστεθεί η εξάρτηση kapt και να σχολιαστούν η κλάση οντότητας, η διεπαφή DAO και η κλάση βάσης δεδομένων. Το RoomDatabase χρησιμεύει ως σημείο εισόδου: μέσω αυτού αποκτάται το DAO και εκτελούνται λειτουργίες στη βάση δεδομένων. Το Room υποστηρίζει Flow για αντιδραστικά ερωτήματα, μετανάστευση σχήματος και έλεγχο ερωτημάτων στο στάδιο της μεταγλώττισης.

kotlin
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "full_name") val name: String,
    @ColumnInfo val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert
    suspend fun insert(user: User)

    @Delete
    suspend fun delete(user: User)
}

@Database(
    entities = [User::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Core Data — πλαίσιο iOS

Core Data — πλαίσιο της Apple για διαχείριση γράφου αντικειμένων και αποθήκευσή τους στο δίσκο. Σε αντίθεση με το Room, το Core Data δεν λειτουργεί με πίνακες, αλλά με διαχειριζόμενα αντικείμενα (NSManagedObject) που σχηματίζουν ιεραρχία σχέσεων. Το Core Data υποστηρίζει τεμπέλικη φόρτωση, αναίρεση αλλαγών και σύνθετα ερωτήματα μέσω NSFetchRequest.

Στοίβα Core Data

Τη βάση του Core Data αποτελεί μια στοίβα τριών συστατικών: διαχειριζόμενο πλαίσιο (NSManagedObjectContext), μόνιμη αποθήκευση (NSPersistentStoreCoordinator) και μοντέλο δεδομένων (NSManagedObjectModel). Το NSPersistentContainer ενώνει όλα τα συστατικά σε ένα ενιαίο σημείο εισόδου, απλοποιώντας τη διαμόρφωση για σύγχρονες εφαρμογές σε Swift.

swift
import CoreData

class PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentContainer

    init() {
        container = NSPersistentContainer(name: "AppModel")
        container.loadPersistentStores { _, error in
            if let error = error {
                fatalError("Failed: \(error)")
            }
        }
    }

    func saveUser(name: String, email: String) {
        let context = container.viewContext
        let user = User(context: context)
        user.name = name
        user.email = email

        do {
            try context.save()
        } catch let error {
            print("Σφάλμα αποθήκευσης: \(error)")
        }
    }
}

Η αποθήκευση αρχείων (File Storage) χρησιμοποιείται για την αποθήκευση εικόνων, βίντεο και εγγράφων. Το Android παρέχει εσωτερική αποθήκευση (context.filesDir) — ιδιωτική για την εφαρμογή, και εξωτερική (Environment.getExternalStorageDirectory) — προσβάσιμη σε άλλες εφαρμογές. Στο iOS, τα αρχεία αποθηκεύονται στους καταλόγους Documents και Library, με το Library/Caches να προορίζεται για προσωρινή μνήμη που δεν δημιουργεί αντίγραφο ασφαλείας στο iCloud. Για εργασία με αρχεία, και οι δύο πλατφόρμες παρέχουν File API και λειτουργίες ροής ανάγνωσης και εγγραφής. Σύγχρονες βιβλιοθήκες όπως Coil και SDWebImage προσθέτουν ένα επίπεδο προσωρινής αποθήκευσης, συνδυάζοντας την αποθήκευση αρχείων με τη μνήμη RAM για βέλτιστη απόδοση.

Στο Android, η εναλλακτική του Core Data σε πολυπλοκότητα και λειτουργικότητα είναι το Realm — μια αντικειμενοστραφής βάση δεδομένων που λειτουργεί απευθείας με μοντέλα χωρίς επίπεδο SQL. Το Realm είναι ταχύτερο από την SQLite σε λειτουργίες ανάγνωσης και υποστηρίζει ζωντανά αντικείμενα που ενημερώνουν αυτόματα το UI όταν αλλάζουν τα δεδομένα.

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

Τι είναι το Data Persistence στην κινητή ανάπτυξη;

Data Persistence — μηχανισμοί αποθήκευσης δεδομένων στη μη πτητική μνήμη της συσκευής που εξασφαλίζουν την προσβασιμότητά τους μετά από επανεκκίνηση της εφαρμογής. Σε αυτά περιλαμβάνονται βάσεις δεδομένων, αποθήκευση αρχείων και συστήματα ρυθμίσεων.

Πώς διαφέρει το Room από την άμεση χρήση της SQLite;

Το Room είναι ένα επίπεδο ORM πάνω από την SQLite που εξαλείφει τη μη αυτόματη γραφή SQL ερωτημάτων και ContentValues. Το Room ελέγχει τα SQL ερωτήματα στο στάδιο της μεταγλώττισης, υποστηρίζει Kotlin Coroutines και Flow, και αυτόματα δημιουργεί κώδικα πρόσβασης δεδομένων.

Πότε πρέπει να χρησιμοποιείται το SharedPreferences;

Το SharedPreferences είναι κατάλληλο για αποθήκευση μικρού όγκου απλών δεδομένων: ρυθμίσεις εφαρμογής, σημαίες, αναγνωριστικά και προτιμήσεις χρήστη. Για σύνθετα ή δομημένα δεδομένα, καλύτερα να χρησιμοποιείτε Room ή DataStore.

Τι είναι το Core Data στο iOS;

Core Data — πλαίσιο της Apple για διαχείριση γράφου αντικειμένων. Παρέχει εργασία με διαχειριζόμενα αντικείμενα, παρακολούθηση αλλαγών, τεμπέλικη φόρτωση και αυτόματη αποθήκευση σε μόνιμη αποθήκευση (SQLite, XML ή δυαδική μορφή).

Ποια μέθοδο αποθήκευσης δεδομένων να επιλέξουμε για νέο έργο;

Η επιλογή εξαρτάται από την πολυπλοκότητα των δεδομένων: για ρυθμίσεις — DataStore ή UserDefaults, για δομημένες εγγραφές — Room (Android) ή Core Data (iOS), για αρχεία — File Storage. Τα κριτήρια περιλαμβάνουν τον όγκο δεδομένων, τις απαιτήσεις απόδοσης και την ανάγκη κρυπτογράφησης. Ο συνδυασμός πολλών μηχανισμών σε μία εφαρμογή είναι συνήθης πρακτική που επιτρέπει τη βέλτιστη χρήση των πλεονεκτημάτων κάθε προσέγγισης.

Περίληψη

  • Data Persistence — το θεμέλιο κάθε εφαρμογής κινητού, εξασφαλίζει τη διατήρηση δεδομένων χρήστη μεταξύ συνεδριών
  • SharedPreferences και UserDefaults — απλά συστήματα για αποθήκευση ζευγών κλειδιού-τιμής με σύγχρονη πρόσβαση
  • SQLite — ενσωματωμένη σχεσιακή βάση δεδομένων, διαθέσιμη και στις δύο πλατφόρμες χωρίς πρόσθετες εξαρτήσεις
  • Room — λύση ORM από την Google, παρέχει ασφάλεια τύπων και αντιδραστικά ερωτήματα μέσω Flow
  • Core Data — ισχυρό πλαίσιο της Apple για διαχείριση σύνθετων γράφων αντικειμένων με αυτόματη παρακολούθηση αλλαγών
  • DataStore — σύγχρονη εναλλακτική του SharedPreferences με ασύγχρονο API βασισμένο σε Coroutines και Flow

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

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

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

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