Firebase Firestore adalah basis data dokumen NoSQL fleksibel dari Google dengan sinkronisasi real-time otomatis untuk aplikasi mobile dan web. Data disimpan dalam bentuk koleksi dan dokumen, yang masing-masing berisi sekumpulan field dengan struktur arbitrer. Menurut data Google, 2026, Firestore mendukung replikasi multi-regional dengan pemulihan otomatis saat kegagalan. SDK mengirimkan perubahan ke server melalui koneksi WebSocket dengan latensi kurang dari 100 milidetik.
Poin utama
Firebase Firestore adalah basis data NoSQL cloud yang dirilis oleh Google pada tahun 2019 sebagai penerus Realtime Database. Firestore dibangun di atas infrastruktur Google Cloud Spanner dan Google Cloud Datastore, menyediakan konsistensi data yang ketat dalam satu transaksi dan replikasi multi-regional otomatis. SDK mendukung Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform, dan Unity.
Firestore diumumkan di Google I/O 2017 sebagai “Cloud Firestore” — solusi yang menghilangkan batasan utama Realtime Database: kurangnya dukungan untuk kueri kompleks, ketidakmampuan menskalakan data di beberapa node, dan konsistensi yang lemah. Menurut data Google (2026), Firestore memproses lebih dari 1 triliun kueri per hari dan merupakan basis data default untuk 80% proyek Firebase baru. Namun, Realtime Database tetap relevan untuk skenario dengan latensi sangat rendah (game, pengeditan bersama) berkat struktur JSON yang sederhana.
Firestore ditawarkan dengan model pay-as-you-go dengan batas gratis yang besar pada tarif Spark: 1 GB penyimpanan, 10 GB lalu lintas jaringan per bulan, 50 ribu operasi baca, 20 ribu operasi tulis, dan 20 ribu operasi hapus per hari. Pada tarif Blaze semuanya sama gratisnya, dan kelebihan dikenakan tarif: $0.06 per 100 ribu operasi baca, $0.18 per 100 ribu operasi tulis. Menurut data Google (2026), 90% proyek tidak melampaui batas gratis.
Model data Firestore diorganisir secara hierarkis: root berisi koleksi, setiap koleksi berisi dokumen, setiap dokumen berisi field (tipe primitif, array, Map) dan koleksi bersarang (subcollections). Kedalaman koleksi bersarang tidak terbatas, tetapi dokumen tidak dapat langsung berisi dokumen lain — hanya melalui referensi (Reference type).
Koleksi adalah wadah dokumen dengan pengenal yang dibuat otomatis atau ditentukan. Setiap dokumen adalah objek mirip JSON berukuran hingga 1 MiB. Field dokumen dapat berupa string, angka, nilai boolean, array, Map, stempel waktu (Timestamp), titik geografis (GeoPoint), dan referensi ke dokumen lain (Reference). Ukuran dokumen dibatasi hingga 1 MiB, termasuk nama semua field.
| Tipe field Firestore | Contoh | Diindeks |
|---|---|---|
| String | “user@example.com” | Ya |
| Number | 42, 3.14 | Ya |
| Boolean | true, false | Ya |
| Array | [1, 2, 3] | Hanya contains |
| Map | {“bersarang”: “nilai”} | Ya (berdasarkan kunci) |
| Timestamp | 2026-07-03T12:00:00Z | Ya |
| Reference | users/user123 | Ya |
Firestore mendukung transaksi atomik di tingkat basis data. Transaksi dapat membaca dan menulis banyak dokumen — Commit secara atomik menerapkan semua perubahan atau tidak sama sekali. Maksimum 500 operasi per transaksi, batas waktu 60 detik. Penulisan batch (batch write) adalah operasi tulis atomik non-transaksional tanpa tahap pembacaan. Transaksi sangat penting untuk operasi keuangan, reservasi tempat, dan inventarisasi.
Pilihan antara Firestore dan Realtime Database tergantung pada kebutuhan proyek. Kedua basis data termasuk dalam ekosistem Firebase, menyediakan sinkronisasi real-time, dan tersedia di semua platform, tetapi secara fundamental berbeda dalam model data, penskalaan, dan harga.
Realtime Database menyimpan data dalam satu pohon JSON, yang nyaman untuk struktur sederhana, tetapi mempersulit penskalaan pada kedalaman bersarang lebih dari 3 level. Firestore menggunakan model koleksi-dokumen dengan sharding otomatis, memungkinkan penskalaan hingga jutaan dokumen tanpa penurunan kinerja. Menurut data Google (2026), Firestore mendukung hingga 10 ribu koneksi simultan ke satu koleksi tanpa kehilangan kecepatan, Realtime Database — hingga 200 ribu koneksi ke satu instance.
Realtime Database dikenakan tarif berdasarkan volume data yang ditransfer (byte yang diunduh) dan jumlah koneksi simultan. Firestore — berdasarkan jumlah operasi (baca, tulis, hapus). Untuk aplikasi dengan pembaruan kecil yang sering (chat, notifikasi), Firestore biasanya lebih menguntungkan — setiap operasi tulis memiliki harga tetap terlepas dari ukuran data. Untuk aplikasi dengan pembacaan jarang pada volume data besar, Realtime Database bisa lebih murah.
Rekomendasi Google (2026): gunakan Firestore sebagai basis data default untuk proyek baru, dan Realtime Database — untuk game dan aplikasi di mana latensi minimal (kurang dari 50 ms) sangat penting dan struktur data datar. Kedua basis data dapat bekerja secara bersamaan dalam satu proyek.
Kueri Firestore dijalankan pada koleksi atau grup koleksi dengan pemfilteran, pengurutan, dan batas. Tidak seperti Realtime Database, di mana setiap kueri adalah penelusuran seluruh pohon JSON dengan filter di sisi klien, Firestore menjalankan semua kueri di server menggunakan indeks yang telah dibuat sebelumnya. Ini menjamin bahwa kompleksitas kueri hanya bergantung pada ukuran hasil, bukan pada ukuran koleksi.
Firestore mendukung pemfilteran pada satu atau beberapa field (equality, range, in, array-contains, array-contains-any), pengurutan naik dan turun, batas, dan kursor untuk paginasi. Keterbatasan: kueri gabungan dengan pemfilteran pada field berbeda (where price > 10 AND where category == “books”) memerlukan indeks gabungan; kueri OR dilarang (digunakan in dan array-contains-any) dan kueri dengan ketidaksetaraan pada field berbeda dilarang.
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 secara otomatis membuat indeks untuk field tunggal — kueri pada satu field berfungsi tanpa konfigurasi apa pun. Untuk kueri dengan dua atau lebih field (filter + urutkan), indeks gabungan dibuat. Pada pengiriman kueri pertama, Firestore mengembalikan error dengan tautan ke konsol, di mana indeks dapat dibuat dengan satu klik. Maksimum 200 indeks gabungan per basis data. Indeks dapat diekspor dan diimpor melalui firebase CLI.
Menghubungkan Firestore ke aplikasi Android dilakukan secara standar melalui Firebase BOM. Setelah menambahkan dependensi firebase-firestore-ktx, objek FirebaseFirestore tersedia melalui getInstance() — tanpa kunci atau token tambahan. Firestore menggunakan proyek Firebase yang sama dengan layanan lainnya.
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-firestore-ktx")
}
// Inisialisasi
val db = FirebaseFirestore.getInstance()
Firestore menyediakan dua mode baca: satu kali (get) dan real-time (addSnapshotListener). Pembacaan satu kali mengambil dokumen sekali — berguna untuk pengaturan dan konfigurasi. Listener berlangganan perubahan — setiap pembaruan dokumen secara otomatis mengirimkan data yang diperbarui ke semua klien yang terhubung secara real-time. set() membuat atau menimpa dokumen, update() hanya mengubah field yang ditentukan tanpa menimpa seluruh dokumen.
Menurut data Google (2026), aplikasi berukuran sedang (100 ribu DAU) dengan Firestore real-time mengonsumsi sekitar 5-10 GB lalu lintas keluar per bulan. Penggunaan cache offline (Persistence Cache) mengurangi volume unduhan berulang sebesar 60-70%, karena SDK hanya mengunduh dokumen yang berubah saat koneksi dipulihkan.
Persistence Cache adalah mekanisme bawaan Firestore untuk bekerja tanpa internet. SDK secara otomatis menyimpan cache semua dokumen yang dibaca di perangkat (hingga 500 MiB di Android). Saat koneksi hilang, pembacaan berlanjut dari cache, penulisan diantrekan. Saat koneksi dipulihkan, semua operasi yang tertunda dikirim ke server, dan cache disinkronkan dengan server. Untuk kontrol konflik, gunakan snapshot-metadata.hasPendingWrites dan setOptions(ServerTimestampBehavior).
Security Rules adalah bahasa deklaratif untuk pembatasan akses ke Firestore, yang dijalankan di server Google sebelum setiap operasi baca atau tulis. Rules tidak memerlukan kode server — ditulis di konsol Firebase atau melalui firebase CLI dan versioning melalui Git. Setiap operasi diperiksa kepatuhannya terhadap aturan, dan jika dilanggar, error PERMISSION_DENIED dikembalikan.
Aturan Firestore Security Rules terdiri dari blok match dan ekspresi allow. match menentukan jalur ke koleksi atau dokumen, allow menentukan operasi yang diizinkan (read, write, create, update, delete) dan kondisi — ekspresi mirip JavaScript yang mengembalikan nilai boolean. Aturan dapat memeriksa autentikasi (request.auth), data permintaan (request.resource.data), data yang ada (resource.data), waktu (request.time), dan jalur (request.path).
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 mendukung validasi tipe dan nilai di sisi server. Penulisan dapat dilarang jika harga negatif atau nama kosong. Semua pemeriksaan dilakukan di server Google sebelum penulisan — ini menjamin konsistensi data terlepas dari klien (Android, iOS, Web, Admin SDK). Rules tidak melindungi dari Admin SDK yang berbahaya — menurut definisi, ia melewati aturan. Untuk perlindungan penuh, gunakan Transaction Functions dan Firebase Extensions.
Pertanyaan yang sering diajukan
Firestore menggunakan model dokumen dengan indeks dan kueri kompleks. Realtime Database menyimpan data dalam pohon JSON dan memberikan latensi lebih rendah. Firestore direkomendasikan untuk proyek baru.
Firestore secara otomatis melakukan sharding data berdasarkan koleksi — tidak perlu mengonfigurasi replikasi atau sharding. Basis data menangani jutaan dokumen dalam satu koleksi dan ribuan koneksi simultan tanpa degradasi.
Ya, gunakan Firebase Console — fungsi “Export to Firestore” mengubah struktur JSON Realtime Database menjadi koleksi dan dokumen Firestore dalam beberapa klik. Node bersarang menjadi koleksi bersarang.
Last write wins — secara default, Firestore menggunakan kebijakan “tulisan terakhir menang” untuk menyelesaikan konflik saat penulisan simultan. Untuk pemrosesan kustom, gunakan transaksi dengan pembacaan ulang.
Batas gratis tarif Spark: 1 GB penyimpanan, 50 ribu operasi baca dan 20 ribu operasi tulis per hari. Ini cukup untuk MVP dan aplikasi dengan beban ringan.
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.
Baca juga