Pag-iimbak ng data sa mobile development: ano ito, mga paraan at paano ito gumagana

May-akda: IT Sectr Nai-publish: 2026-03-08 Oras ng pagbabasa: 9 min

Ang pag-iimbak ng data ay isa sa mga pangunahing gawain ng isang mobile application, na nakakaapekto sa performance, seguridad at karanasan ng gumagamit. Sa artikulong ito, tatalakayin natin ang SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore at Keychain, pati na rin ang mga format ng serialization (JSON, Protobuf) at mga library (Gson, Moshi, kotlinx.serialization). Ang gabay na ito ay makakatulong sa mga baguhang developer na pumili ng tamang solusyon sa pag-iimbak ng data. Matuto pa sa opisyal na gabay ng Android sa pag-iimbak ng data.

Mga Pangunahing Punto

  • Room (Android) at Core Data (iOS) ay ang mga opisyal na ORM para sa pagtatrabaho sa mga relational database sa bawat platform
  • SharedPreferences (Android) ay pinapalitan ng DataStore — isang asynchronous at type-safe na key-value storage
  • Para sa ligtas na pag-iimbak ng token, ginagamit ang Keystore (Android) at Keychain (iOS) na may proteksyon ng hardware
  • Firebase Firestore ay isang NoSQL database na may real-time synchronization at offline mode
  • Serialization — pag-convert ng mga bagay sa JSON/Protobuf sa pamamagitan ng Gson, Moshi, kotlinx.serialization

Mga Lokal na Database: SQLite, Room, Core Data, Realm

Para sa pag-iimbak ng nakaayos na data na may mga relasyon sa pagitan ng mga entity, ginagamit ang mga relational database.

SQLite

SQLite ay isang naka-embed na relational database na gumagana sa anumang mobile platform. Hindi nangangailangan ng hiwalay na server, ang data ay naka-imbak sa isang file. Ang SQLite ay ang pundasyon para sa Room (Android) at opsyonal para sa Core Data (iOS). Mga library: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room ay ang opisyal na Android Architecture Components library para sa pagtatrabaho sa SQLite. Nagbibigay ng ORM layer: Entity (talahanayan), DAO (query), Database (entry point). Sinusuri ng Room ang SQL query sa oras ng compilation, sumusuporta sa coroutine at Flow, at awtomatikong nagmi-migrate ng schema.

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 ay framework ng Apple para sa pamamahala ng object graph. Hindi ito purong database — ito ay isang persistence layer sa ibabaw ng SQLite, XML o binary storage. Pinamamahalaan ng Core Data ang mga bagay (NSManagedObject), relasyon, schema versioning, undo/redo, at multithreading sa pamamagitan ng NSManagedObjectContext.

Realm

Realm ay isang alternatibo sa SQLite, na dinisenyo bilang isang high-performance mobile database. Ang Realm ay mas mabilis kaysa SQLite sa pagbasa at pagsulat, sumusuporta sa reactive notifications (Live Objects), on-the-fly encryption, at cross-platform (Android, iOS, Flutter, React Native). Mga disbentaha: mas malaking sukat ng APK/IPA at mas mataas na paggamit ng memory.

Key-Value Storage at Mga Setting

Para sa pag-iimbak ng maliit na halaga ng data (mga setting, token, cache), ginagamit ang mga simpleng key-value store.

SharedPreferences (Android)

SharedPreferences ay isang legacy key-value store sa Android. Mga disbentaha: synchronous access (naba-block ang UI sa pagbasa), kakulangan ng typing, panganib ng ANR kapag nag-load ng malaking file. HINDI inirerekomenda para sa mga bagong proyekto.

DataStore (Jetpack Android)

DataStore ay ang modernong kapalit ng SharedPreferences mula sa Google. Gumagana nang asynchronous sa pamamagitan ng Kotlin Coroutines at Flow, sumusuporta sa Preferences DataStore (key-value) at Proto DataStore (typed data sa pamamagitan ng Protobuf). Ang DataStore ay ligtas para sa UI thread at sumusuporta sa mga transaksyon.

NSUserDefaults (iOS)

UserDefaults ay ang karaniwang imbakan para sa maliliit na setting sa iOS. Sumusuporta sa mga primitive type, string, petsa, Data. Ang UserDefaults ay synchronous, kaya hindi angkop para sa malalaking volume ng data. Ang pagrehistro ng mga halaga sa pamamagitan ng register(defaults:) ay nagtatakda ng mga default na halaga.

Mga Cloud Database: Firebase Firestore at Realtime DB

Para sa pag-iimbak ng data sa mga application na nangangailangan ng synchronization sa pagitan ng mga device, ginagamit ang Firebase cloud database.

Cloud Firestore

Firebase Firestore ay isang NoSQL document database na may real-time subscription, awtomatikong scaling, malalakas na query, at built-in na offline mode. Ang data ay nakaayos sa mga collection at dokumento (mga istrakturang kahawig ng JSON). Sinusuportahan ng Firestore ang mga transaksyon at batch operation. Mainam para sa mga chat, feed, at social app.

Firebase Realtime Database

Firebase Realtime Database ay isang mas lumang Firebase NoSQL database na nag-iimbak ng data bilang isang JSON tree. Mas simple kaysa Firestore ngunit hindi gaanong flexible sa query at scaling. Inirerekomenda para sa mga simpleng real-time application (online status, simpleng chat).

TampokCloud FirestoreFirebase Realtime DB
Modelo ng dataCollection → DokumentoJSON tree
QueryKompleks (pagsala, pag-uuri, limitasyon)Simple (ayon sa key)
ScalingAwtomatikoManual sharding
Offline modeOo (persistent cache)Oo
PresyoBawat read/write operationBawat trapiko + imbakan

Ligtas na Pag-iimbak: Keystore, Keychain at EncryptedSharedPreferences

Ang pag-iimbak ng mga token, password at encryption key ay nangangailangan ng espesyal na protektadong imbakan.

Android Keystore

Android Keystore ay isang system storage para sa cryptographic key. Ang mga key ay naka-imbak sa isang hardware environment (TEE — Trusted Execution Environment), hindi naa-access ng mga app at OS. Sumusuporta sa key generation, encryption, at signing. Android 9+ ay may StrongBox Keymaster (dedicated chip).

iOS Keychain

Keychain Services ay isang secure na iOS storage para sa mga password, key, at certificate. Ang data ay naka-encrypt gamit ang hardware Secure Enclave. Sinusuportahan ng Keychain ang mga antas ng accessibility: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences ay isang wrapper sa paligid ng SharedPreferences na may key at value encryption sa pamamagitan ng AES256-GCM at HKDF. Naipatupad sa AndroidX Security library. Inirerekomenda para sa pag-iimbak ng mga token at sensitibong setting.

Sa IT Sectr, gumagamit kami ng Android Keystore + EncryptedSharedPreferences para sa pag-iimbak ng refresh token at biometric-based key. Sa iOS, gumagamit kami ng Keychain na may antas na kSecAttrAccessibleWhenUnlockedThisDeviceOnly para sa maximum na seguridad.

Pag-iimbak ng File: Internal, External, Cache Directory

Para sa pag-iimbak ng file (mga larawan, video, dokumento), ang mga mobile platform ay nagbibigay ng ilang uri ng imbakan.

Android Storage

Ang Android ay nag-iiba sa pagitan ng Internal Storage (/data/data/package/ — pribadong imbakan) at External Storage (SD card o emulated partition). Ang Cache Directory ay pansamantalang imbakan na maaaring linisin ng system. Ang Scoped Storage (Android 10+) ay naglilimita ng access sa External Storage — ang mga app ay nakakakita lamang ng kanilang sariling mga file o mga file sa pamamagitan ng MediaStore/SAF.

iOS Storage

Ang iOS ay nagbibigay ng Documents Directory (iCloud backup, persistent data), Library/Caches (pansamantalang file, hindi naba-back up) at Tmp Directory (pansamantala, maaaring linisin). Gamitin ang NSFileManager para sa pagtatrabaho sa file system. iOS 11+ ay sumusuporta sa File Provider para sa mga cloud file.

Serialization ng Data: JSON, Protobuf at Mga Library

Ang serialization ay nagko-convert ng mga bagay sa isang format para sa paghahatid o pag-iimbak. Ang deserialization ay ang kabaligtaran na proseso.

Mga Format

JSON (JavaScript Object Notation) ay ang pinakasikat na format: nababasa, flexible, suportado ng lahat ng platform. XML ay mas mahigpit, ginagamit sa mga legacy system. Protobuf (Protocol Buffers) ay isang binary format mula sa Google: 3-10x mas compact kaysa JSON, mas mabilis mag-parse, na may mahigpit na schema. Ginagamit para sa high-load system at microservice.

Android Library

  • Gson (Google) — simple, flexible, ngunit mabagal. Awtomatikong gumagana sa Java/Kotlin object
  • Moshi (Square) — mas mabilis kaysa Gson, mas mahusay na Kotlin support (non-null property, default value, sealed class)
  • kotlinx.serialization — native Kotlin serialization mula sa JetBrains, gumagana sa oras ng compilation, sumusuporta sa JSON, Protobuf, CBOR

iOS Library

JSONSerialization ay ang built-in na API para sa pagtatrabaho sa JSON. Codable (Encodable/Decodable) ay isang modernong Swift protocol para sa awtomatikong serialization sa JSON, Property List at iba pang format.

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)

Mga Solusyong Cross-Platform: Hive, ObjectBox, Drift

Para sa Flutter at React Native, may mga sariling mahusay na storage library.

Hive (Flutter)

Hive ay isang magaan, mabilis na key-value store para sa Flutter. Hindi nangangailangan ng native code (purong Dart), sumusuporta sa typing sa pamamagitan ng TypeAdapter, at gumagana sa isolates. Mainam para sa cache, setting, at maliit na volume ng data.

ObjectBox

ObjectBox ay isang high-performance embedded database para sa Flutter, Android at iOS. 10+ beses na mas mabilis kaysa SQLite, gumagamit ng flat file structure para sa minimal na overhead. Sumusuporta sa relasyon, query, at reactive subscription (ObjectBox Dart).

Drift (dating Moor)

Drift ay isang reactive SQLite library para sa Flutter at Dart. Nagbibigay ng type-safe query, migration, DAO function, at Stream support (reactive update). Ang Drift ay ang pangunahing pagpipilian para sa Flutter project na nangangailangan ng SQLite.

Mga Madalas Itanong

Alin ang mas mahusay para sa lokal na pag-iimbak ng data: Room o Core Data?

Ang pagpili ay depende sa platform: Room (Android) ay ang opisyal na library na nakabatay sa SQLite na may compile-time query checking. Core Data (iOS) ay framework ng Apple na may object graph. Para sa cross-platform project, ang Realm o SQLite sa pamamagitan ng ORM ay angkop.

Ano ang pagkakaiba ng SharedPreferences at DataStore?

Ang SharedPreferences ay lumang implementation na may synchronous access at ANR risk. DataStore (Jetpack) ay modernong kapalit na batay sa Kotlin Coroutines at Flow, sumusuporta sa asynchrony, typing, at error protection.

Paano ligtas na mag-imbak ng token at password sa mobile app?

Android: EncryptedSharedPreferences o Android Keystore. iOS: Keychain Services na may accessibility na WhenUnlockedThisDeviceOnly. Para sa kritikal na data, gamitin ang Secure Enclave (iOS) at hardware Keystore (Android) na may biometrics.

Ano ang Firebase Firestore at kailan ito dapat gamitin?

Cloud Firestore ay isang NoSQL database mula sa Firebase na may real-time synchronization, offline mode at automatic scaling. Angkop para sa mga chat, news feed at proyekto na nangangailangan ng synchronization sa pagitan ng device.

Anong ORM ang mayroon para sa Flutter at React Native?

Flutter: Hive (mabilis na key-value), Floor (SQLite ORM), Drift (Moor, reactive SQLite), ObjectBox (high-performance embedded DB). React Native: Realm, WatermelonDB (lazy loading) at AsyncStorage (katulad ng SharedPreferences).

Buod

  • Room (Android) at Core Data (iOS) ay ang mga opisyal na solusyon para sa relational database sa bawat platform
  • DataStore ay pumapalit sa SharedPreferences para sa asynchronous na pag-iimbak ng setting
  • Keystore / Keychain ay mandatory para sa ligtas na pag-iimbak ng token at key
  • Firebase Firestore ay ang pinakamahusay na pagpipilian para sa real-time synchronization sa pagitan ng device
  • Kotlinx.serialization (Android) at Codable (iOS) ay mga modernong approach sa serialization
  • Para sa Flutter: Drift (SQLite), Hive (key-value), ObjectBox (mataas na performance)
  • Realm ay isang cross-platform alternatibo sa SQLite na may reactive notification

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto