Multi-tenancy

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, sambil 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 sambil tetap menggunakan:

  • satu project
  • satu struktur logis untuk jenis
  • satu set definisi indeks, karena jenisnya sama secara logis untuk setiap tenant

Mode Datastore memungkinkan multitenancy dengan menyediakan namespace.

Multi-tenancy dan data berpartisi

Mode Datastore menggunakan partisi untuk mengelompokkan data bagi setiap tenant. Kombinasi ID project dan ID namespace membentuk ID partisi, yang mengidentifikasi setiap partisi. Entitas termasuk dalam satu partisi, dan kueri dibatasi ke satu partisi.

Menentukan namespace untuk entitas

Anda menentukan namespace saat membuat entitas: setelah membuat entitas, Anda tidak dapat mengubah namespace. Jika Anda tidak menentukan namespace secara eksplisit untuk entitas, entitas tersebut akan otomatis ditetapkan ke namespace default, yang tidak memiliki ID string.

Menggunakan namespace dengan parent entity

Entity dan semua ancestor-nya termasuk dalam satu dan hanya satu namespace. Artinya, saat Anda membuat entity dengan entity lain yang ditetapkan sebagai induk, entity turunan berada di namespace yang sama dengan induknya: Anda tidak dapat menentukan 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 terlepas dari 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 set definisi indeks untuk mendukung kueri Task, terlepas dari namespace yang berisi entitas Task.

Misalnya, pertimbangkan aplikasi Daftar Tugas yang mengelompokkan data berdasarkan per 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 yang terisolasi. Aplikasi memproses entity Task secara konsisten di seluruh namespace karena hanya satu skema yang digunakan untuk jenis Task. Aplikasi dengan data yang terisolasi dan perilaku yang konsisten akan menjadi multi-tenant.

Jika struktur logis jenis Task berbeda menurut namespace, aplikasi tidak akan menjadi multitenan karena memproses entitas Task secara berbeda di seluruh namespace. Misalnya, pertimbangkan jenis Task yang memiliki skema berbeda berdasarkan namespace:

  • Entitas Task di namespace Joe mengecualikan properti description dari indeks
  • Entitas Task di namespace Alice mencakup properti description dari indeks

Aplikasi dapat membuat kueri pada properti description untuk entity Task Alice, tetapi tidak dapat membuat kueri pada properti description untuk entity Task Joe, sehingga aplikasi tidak akan menjadi multitenan.

Melihat namespace di konsol

Untuk melihat statistik namespace yang digunakan dalam project Anda, buka halaman Dasbor Datastore di konsol Google Cloud . Untuk menentukan secara terprogram namespace yang digunakan dalam 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.

Langkah berikutnya