Penyimpanan data adalah salah satu tugas utama aplikasi seluler yang memengaruhi kinerja, keamanan, dan pengalaman pengguna. Dalam artikel ini kita akan membahas SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore dan Keychain, serta format serialisasi (JSON, Protobuf) dan perpustakaan (Gson, Moshi, kotlinx.serialization). Panduan ini akan membantu pengembang pemula memilih solusi penyimpanan data yang tepat. Pelajari lebih lanjut di panduan resmi Android tentang penyimpanan data.
Poin Penting
Untuk menyimpan data terstruktur dengan hubungan antar entitas, digunakan database relasional.
SQLite adalah database relasional tertanam yang bekerja di platform seluler mana pun. Tidak memerlukan server terpisah, data disimpan dalam satu file. SQLite adalah dasar untuk Room (Android) dan opsional untuk Core Data (iOS). Perpustakaan: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).
Room adalah perpustakaan Android Architecture Components resmi untuk bekerja dengan SQLite. Menyediakan lapisan ORM: Entity (tabel), DAO (kueri), Database (titik masuk). Room memeriksa kueri SQL saat kompilasi, mendukung coroutine dan Flow, dan secara otomatis memigrasikan skema.
@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 adalah kerangka kerja Apple untuk mengelola graf objek. Ini bukan database murni — ini adalah lapisan persistensi di atas SQLite, XML, atau penyimpanan biner. Core Data mengelola objek (NSManagedObject), hubungan, versi skema, undo/redo, dan multithreading melalui NSManagedObjectContext.
Realm adalah alternatif SQLite, dirancang sebagai database seluler berkinerja tinggi. Realm lebih cepat dari SQLite dalam membaca dan menulis, mendukung notifikasi reaktif (Live Objects), enkripsi langsung, dan lintas platform (Android, iOS, Flutter, React Native). Kekurangan: ukuran APK/IPA meningkat dan penggunaan memori lebih tinggi.
Untuk menyimpan data dalam jumlah kecil (pengaturan, token, cache), digunakan penyimpanan pasangan kunci-nilai sederhana.
SharedPreferences adalah penyimpanan pasangan kunci-nilai lama di Android. Kekurangan: akses sinkron (memblokir UI saat membaca), kurangnya pengetikan, risiko ANR saat memuat file besar. TIDAK direkomendasikan untuk proyek baru.
DataStore adalah pengganti modern SharedPreferences dari Google. Bekerja secara asinkron melalui Kotlin Coroutines dan Flow, mendukung Preferences DataStore (kunci-nilai) dan Proto DataStore (data berjenis melalui Protobuf). DataStore aman untuk thread UI dan mendukung transaksi.
UserDefaults adalah penyimpanan standar untuk pengaturan kecil di iOS. Mendukung tipe primitif, string, tanggal, Data. UserDefaults sinkron, sehingga tidak cocok untuk volume data besar. Pendaftaran nilai melalui register(defaults:) menetapkan nilai default.
Untuk penyimpanan data di aplikasi yang memerlukan sinkronisasi antar perangkat, digunakan database cloud Firebase.
Firebase Firestore adalah database dokumen NoSQL dengan langganan waktu nyata, penskalaan otomatis, kueri kuat, dan mode offline bawaan. Data diatur dalam koleksi dan dokumen (struktur mirip JSON). Firestore mendukung transaksi dan operasi batch. Ideal untuk obrolan, umpan, dan aplikasi sosial.
Firebase Realtime Database adalah database NoSQL Firebase yang lebih lama yang menyimpan data sebagai satu pohon JSON. Lebih sederhana dari Firestore tetapi kurang fleksibel dalam kueri dan penskalaan. Direkomendasikan untuk aplikasi waktu nyata sederhana (status online, obrolan sederhana).
| Fitur | Cloud Firestore | Firebase Realtime DB |
|---|---|---|
| Model data | Koleksi → Dokumen | Pohon JSON |
| Kueri | Kompleks (filter, urut, batas) | Sederhana (berdasarkan kunci) |
| Penskalaan | Otomatis | Sharding manual |
| Mode offline | Ya (cache persisten) | Ya |
| Harga | Per operasi baca/tulis | Per lalu lintas + penyimpanan |
Penyimpanan token, kata sandi, dan kunci enkripsi memerlukan penyimpanan terlindungi khusus.
Android Keystore adalah penyimpanan sistem untuk kunci kriptografi. Kunci disimpan di lingkungan perangkat keras (TEE — Trusted Execution Environment), tidak dapat diakses oleh aplikasi dan sistem operasi. Mendukung pembuatan kunci, enkripsi, dan penandatanganan. Android 9+ menyertakan StrongBox Keymaster (chip khusus).
Keychain Services adalah penyimpanan iOS yang aman untuk kata sandi, kunci, dan sertifikat. Data dienkripsi menggunakan Secure Enclave perangkat keras. Keychain mendukung tingkat aksesibilitas: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.
EncryptedSharedPreferences adalah pembungkus di sekitar SharedPreferences dengan enkripsi kunci dan nilai melalui AES256-GCM dan HKDF. Diimplementasikan di perpustakaan AndroidX Security. Direkomendasikan untuk menyimpan token dan pengaturan sensitif.
Di IT Sectr, kami menggunakan Android Keystore + EncryptedSharedPreferences untuk menyimpan token penyegaran dan kunci biometrik. Di iOS, kami menggunakan Keychain dengan tingkat kSecAttrAccessibleWhenUnlockedThisDeviceOnly untuk keamanan maksimum.
Untuk penyimpanan berkas (gambar, video, dokumen), platform seluler menyediakan beberapa jenis penyimpanan.
Android membedakan antara Internal Storage (/data/data/paket/ — penyimpanan pribadi) dan External Storage (kartu SD atau partisi emulasi). Cache Directory adalah penyimpanan sementara yang dapat dibersihkan sistem. Scoped Storage (Android 10+) membatasi akses ke External Storage — aplikasi hanya melihat file mereka sendiri atau file melalui MediaStore/SAF.
iOS menyediakan Documents Directory (cadangan iCloud, data persisten), Library/Caches (file sementara, tidak dicadangkan) dan Tmp Directory (sementara, dapat dibersihkan). Gunakan NSFileManager untuk bekerja dengan sistem file. iOS 11+ mendukung File Provider untuk file cloud.
Serialisasi mengonversi objek menjadi format untuk transmisi atau penyimpanan. Deserialisasi adalah proses sebaliknya.
JSON (JavaScript Object Notation) adalah format paling populer: dapat dibaca, fleksibel, didukung oleh semua platform. XML lebih ketat, digunakan di sistem lama. Protobuf (Protocol Buffers) adalah format biner dari Google: 3-10x lebih ringkas dari JSON, penguraian lebih cepat, dengan skema ketat. Digunakan untuk sistem beban tinggi dan mikroservis.
JSONSerialization adalah API bawaan untuk bekerja dengan JSON. Codable (Encodable/Decodable) adalah protokol Swift modern untuk serialisasi otomatis ke JSON, Property List, dan format lainnya.
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)
Untuk Flutter dan React Native, ada perpustakaan penyimpanan efisien sendiri.
Hive adalah penyimpanan kunci-nilai ringan dan cepat untuk Flutter. Tidak memerlukan kode asli (Dart murni), mendukung pengetikan melalui TypeAdapter, dan bekerja di isolate. Ideal untuk cache, pengaturan, dan volume data kecil.
ObjectBox adalah database tertanam berkinerja tinggi untuk Flutter, Android, dan iOS. 10+ kali lebih cepat dari SQLite, menggunakan struktur file datar untuk overhead minimal. Mendukung hubungan, kueri, dan langganan reaktif (ObjectBox Dart).
Drift adalah perpustakaan SQLite reaktif untuk Flutter dan Dart. Menyediakan kueri aman tipe, migrasi, fungsi DAO, dan dukungan Stream (pembaruan reaktif). Drift adalah pilihan utama untuk proyek Flutter yang memerlukan SQLite.
Pertanyaan yang Sering Diajukan
Pilihan tergantung pada platform: Room (Android) adalah perpustakaan resmi berbasis SQLite dengan pemeriksaan kueri waktu kompilasi. Core Data (iOS) adalah kerangka kerja Apple dengan graf objek. Untuk proyek lintas platform, Realm atau SQLite melalui ORM cocok.
SharedPreferences adalah implementasi lama dengan akses sinkron dan risiko ANR. DataStore (Jetpack) adalah pengganti modern berbasis Kotlin Coroutines dan Flow, mendukung asinkronisitas, pengetikan, dan perlindungan kesalahan.
Android: EncryptedSharedPreferences atau Android Keystore. iOS: Keychain Services dengan aksesibilitas WhenUnlockedThisDeviceOnly. Untuk data kritis, gunakan Secure Enclave (iOS) dan Keystore perangkat keras (Android) dengan biometrik.
Cloud Firestore adalah database NoSQL dari Firebase dengan sinkronisasi waktu nyata, mode offline, dan penskalaan otomatis. Cocok untuk obrolan, umpan berita, dan proyek yang memerlukan sinkronisasi antar perangkat.
Flutter: Hive (kunci-nilai cepat), Floor (ORM SQLite), Drift (Moor, SQLite reaktif), ObjectBox (DB tertanam berkinerja tinggi). React Native: Realm, WatermelonDB (pemuatan malas) dan AsyncStorage (analog SharedPreferences).
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.