Firebase Firestore — apa itu, dokumen dan koleksi NoSQL

Penulis: IT Sectr Diterbitkan: 2026-04-28 Waktu membaca: 10 mnt

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

  • Firestore — basis data dokumen NoSQL dengan dukungan kueri, indeks, dan transaksi.
  • Sinkronisasi data bekerja secara real-time melalui WebSocket — perubahan di server langsung dikirim ke semua klien.
  • Firestore mendukung mode offline — data di-cache secara lokal dan disinkronkan saat koneksi dipulihkan.
  • Penskalaan otomatis hingga jutaan koneksi simultan tanpa konfigurasi sharding atau replikasi.
  • Aturan keamanan Security Rules memungkinkan pengelolaan akses ke data tanpa kode server.

Apa itu Firebase Firestore

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.

Evolusi dari Realtime Database

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.

Batas gratis Firestore

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: koleksi, dokumen, dan field

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 dan dokumen

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 FirestoreContohDiindeks
String“user@example.com”Ya
Number42, 3.14Ya
Booleantrue, falseYa
Array[1, 2, 3]Hanya contains
Map{“bersarang”: “nilai”}Ya (berdasarkan kunci)
Timestamp2026-07-03T12:00:00ZYa
Referenceusers/user123Ya

Penulisan batch dan transaksi

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.

Perbandingan Firestore dan Realtime Database

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.

Perbedaan utama

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.

Harga

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, indeks, dan paginasi di Firestore

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.

Jenis kueri

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.

kotlin
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)
}

Indeks otomatis dan gabungan

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.

Integrasi Firestore di Android

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.

groovy
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-firestore-ktx")
}

// Inisialisasi
val db = FirebaseFirestore.getInstance()

Membaca dan menulis data

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.

Mode offline

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).

Aturan keamanan dan validasi data

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.

Struktur aturan

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).

javascript
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;
    }
  }
}

Validasi data

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

Apa perbedaan antara Firestore dan Realtime Database?

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.

Bagaimana Firestore menskalakan?

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.

Bisakah data dimigrasi dari Realtime Database ke Firestore?

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.

Bagaimana Firestore menangani konflik saat penulisan offline?

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.

Berapa banyak penyimpanan gratis yang diberikan Firestore?

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

  • Firebase Firestore — basis data dokumen NoSQL Google dengan sinkronisasi real-time dan penskalaan otomatis.
  • Model data: koleksi → dokumen → field (String, Number, Boolean, Array, Map, Timestamp, Reference, GeoPoint).
  • Mendukung kueri gabungan dengan pemfilteran, pengurutan, paginasi, dan indeks gabungan untuk kondisi kompleks.
  • Mode offline menyimpan cache hingga 500 MiB data di perangkat dengan sinkronisasi otomatis saat koneksi dipulihkan.
  • Security Rules — bahasa sisi server untuk hak akses dengan validasi tipe dan nilai tanpa menulis kode backend.
  • Replikasi multi-regional dengan pemulihan otomatis saat kegagalan — data tersedia bahkan saat pusat data down.
  • Direkomendasikan untuk proyek baru sebagai basis data default, Realtime Database — untuk game dan skenario latensi sangat rendah.

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.

Diskusikan proyek

Baca juga