Anda dapat mendukung multitenancy di aplikasi Anda dengan menyediakan partisi data terpisah untuk beberapa organisasi klien, yang dikenal sebagai tenant. Dengan begitu, Anda dapat menyesuaikan nilai data untuk setiap tenant, sekaligus mempertahankan skema data yang sama untuk semua tenant. Hal ini membuat penyediaan tenant baru lebih efisien karena Anda tidak perlu mengubah struktur data saat menambahkan tenant.
Manfaat multitenancy
Firestore dalam mode Datastore memungkinkan aplikasi multitenant menggunakan silo data terpisah untuk setiap tenant saat masih menggunakan:
- satu project
- struktur logis tunggal untuk berbagai jenis
- sekumpulan definisi indeks, karena jenisnya secara logis sama untuk setiap tenant
Mode Datastore memungkinkan multitenancy dengan menyediakan namespace.
Data yang dipartisi dan multitenancy
Mode Datastore menggunakan partisi untuk memisahkan data bagi setiap penyewa. Kombinasi ID project dan ID namespace membentuk ID partisi, yang mengidentifikasi setiap partisi. Entity milik satu partisi, dan kueri tercakup dalam satu partisi.
Menentukan namespace untuk entity
Anda menentukan namespace saat membuat entity: setelah membuat entity, Anda tidak dapat mengubah namespace. Jika Anda tidak secara eksplisit menentukan namespace untuk entity, namespace akan otomatis ditetapkan ke namespace default yang tidak memiliki ID string.
Menggunakan namespace dengan parent entity
Entity dan semua ancestornya termasuk dalam satu dan hanya satu namespace. Artinya, saat Anda membuat entity dengan entity lain yang ditetapkan sebagai induk, entity turunan tersebut akan berada dalam namespace yang sama dengan induknya: Anda tidak dapat menentukan beberapa namespace lain.
Contoh kasus penggunaan
Manfaat utama multitenancy adalah memiliki aplikasi yang sama yang melayani beberapa
organisasi klien. Untuk mencapai manfaat ini, untuk jenis tertentu, aplikasi
Anda harus berperilaku sama terlepas dari namespace. Misalnya,
dari perspektif aplikasi, entity jenis Task
dalam satu namespace
secara logis harus sama dengan entity jenis Task
di semua namespace
lainnya. Aplikasi Anda kemudian dapat menggunakan satu kumpulan definisi indeks
untuk mendukung kueri Task
, terlepas dari namespace mana yang berisi entity
Task
.
Misalnya, pertimbangkan aplikasi Daftar Tugas yang memisahkan data per pengguna. Aplikasi dapat menentukan namespace berdasarkan nama pengguna, sehingga akan menghasilkan partisi berikut:
Partition ID: project:"my_project_id"/namespace:"Joe" Partition ID: project:"my_project_id"/namespace:"Alice" Partition ID: project:"my_project_id"/namespace:"Charlie"
Aplikasi dapat menentukan struktur logis jenis Task
sebagai berikut, yang akan
digunakan untuk semua namespace:
kind: Task properties: - "done", Boolean - "created", DateTime - "description", String, excluded from index
Saat pengguna membuat entity jenis Task
, entity tersebut akan disimpan di partisi pengguna
sehingga menghasilkan data yang terpisah. Aplikasi memproses entity Task
secara konsisten di seluruh namespace karena hanya satu skema yang digunakan untuk
jenis Task
. Aplikasi dengan data yang terpisah-pisah dan perilaku yang konsisten akan bersifat multitenant.
Jika struktur logis dari jenis Task
berbeda berdasarkan namespace, aplikasi
tidak akan menjadi multitenant karena memproses entity Task
secara berbeda
di seluruh namespace. Misalnya, pertimbangkan jenis Task
yang memiliki skema berbeda berdasarkan namespace:
- Entitas
Task
di namespace Joe mengecualikan propertidescription
dari indeks - Entity
Task
dalam namespace Alice menyertakan propertidescription
dari indeks
Aplikasi dapat membuat kueri pada properti description
untuk entity Task
Alice, tetapi tidak dapat membuat kueri pada properti description
untuk entity Task
Joko, sehingga aplikasi tidak akan menjadi multitenant.
Melihat namespace di konsol
Untuk melihat statistik namespace yang digunakan di project Anda, buka halaman Dasbor Datastore di Konsol Google Cloud. Untuk menentukan namespace mana yang digunakan dalam project Anda secara terprogram, lihat Kueri namespace.
Jika perlu mengelompokkan data dalam tenant, Anda dapat mengategorikan data berdasarkan jenis, dan juga dapat mengatur data yang sangat terkait dengan grup entitas.