Anda dapat mendukung multitenancy di aplikasi dengan menyediakan partisi data terpisah untuk beberapa organisasi klien, yang dikenal sebagai tenant. Hal ini memungkinkan Anda menyesuaikan nilai data untuk setiap tenant, sekaligus mempertahankan skema data yang sama untuk semua tenant. Hal ini membuat penyediaan tenant baru menjadi lebih efisien karena Anda tidak perlu mengubah struktur data saat menambahkan tenant.
Manfaat multitenancy
Firestore dalam mode Datastore memungkinkan aplikasi multi-tenant menggunakan silo data terpisah untuk setiap tenant sambil tetap menggunakan:
- satu project
- satu struktur logis untuk jenis
- satu kumpulan definisi indeks, karena jenisnya secara logis sama untuk setiap tenant
Mode datastore memungkinkan multitenancy dengan menyediakan namespaces.
Multitenancy dan data berpartisi
Mode Datastore menggunakan partisi untuk menyimpan data secara terpisah bagi setiap tenant. Kombinasi project ID dan namespace ID membentuk ID partisi, yang mengidentifikasi setiap partisi. Entitas termasuk dalam satu partisi, dan kueri dibatasi untuk satu partisi.
Menentukan namespace untuk entity
Anda menentukan namespace saat membuat entity: setelah membuat entity, Anda tidak dapat mengubah namespace. Jika Anda tidak menentukan namespace secara eksplisit untuk entity, namespace akan otomatis ditetapkan ke namespace default, yang tidak memiliki ID string.
Menggunakan namespace dengan entity induk
Entity dan semua ancestor-nya termasuk dalam satu dan hanya satu namespace. Hal ini berarti bahwa saat Anda membuat entity dengan entity lain yang ditetapkan sebagai induk, entity turunan 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 untuk melayani beberapa
organisasi klien. Untuk mendapatkan manfaat ini, untuk jenis tertentu, aplikasi Anda harus berperilaku sama, apa pun namespace-nya. 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 menyimpan data secara terpisah berdasarkan pengguna. Aplikasi dapat menentukan namespace berdasarkan nama pengguna, sehingga 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, untuk
digunakan untuk semua namespace:
kind: Task properties: - "done", Boolean - "created", DateTime - "description", String, excluded from index
Saat pengguna membuat entity jenis Task
, entity tersebut disimpan di
partisi pengguna sendiri, sehingga menghasilkan data silo. Aplikasi memproses entity Task
secara konsisten di seluruh namespace karena hanya satu skema yang digunakan untuk
jenis Task
. Aplikasi dengan data silo dan perilaku yang konsisten akan bersifat
multi-tenant.
Jika struktur logis jenis Task
berbeda menurut namespace, aplikasi
tidak akan bersifat multi-tenant karena memproses entitas Task
secara berbeda
di seluruh namespace. Misalnya, pertimbangkan jenis Task
yang memiliki skema berbeda
berdasarkan namespace:
- Entity
Task
di namespace Joe mengecualikan propertidescription
dari indeks - Entity
Task
di namespace Alice menyertakan propertidescription
dari indeks
Aplikasi dapat membuat kueri pada properti description
untuk entity Task
Alisa, tetapi tidak dapat membuat kueri pada properti description
untuk entity Task
Joe, sehingga aplikasi tidak akan bersifat multi-tenant.
Melihat namespace di konsol
Untuk melihat statistik namespace yang digunakan dalam project Anda, buka halaman Dasbor Datastore di konsol Google Cloud. Untuk menentukan namespace mana yang digunakan secara terprogram di project Anda, lihat Kueri namespace.
Jika perlu mengelompokkan data dalam tenant, Anda dapat mengategorikan data menurut jenis, dan Anda juga dapat mengatur data yang sangat terkait dengan grup entity.