ProgrammerZamanNow / qna

Q&A Bareng Programmer Zaman Now, Orang Ganteng dan Intelek
280 stars 7 forks source link

Database pada aplikasi multi tenant #388

Open netng opened 2 years ago

netng commented 2 years ago

Mas @khannedy , izin bertanya, saya sempat baca-baca untuk aplikasi dengan sistem multitenant itu secara database bisa dibagi menjadi 3, yaitu:

a. satu database digunakan bersama-sama tapi dipisahkan berdasarkan tenant_id b. dipisahkan per schema c. satu tenant satu database

mungkin mas @khannedy bisa bantu memberikan insight tentang partitioning database untuk sistem multitenant ini seperti apa baiknya, sebagai studi kasus mungkin bisa di postgres & springboot jpa. Terimakasih mas @khannedy

momogie commented 1 year ago

saya sedang implement yang poin c, masih on development dan belum go live. challenge yang saya dapat selama ini,

  1. ada perubahan struktur database, tambah kolom, hapus kolom, ubah tipe data dll (alter tiap database)
  2. ada perubahan data, misalnya ada data yang harus di update (update tiap database)
  3. multi server, misal tenant 1-10 ada di server a dan 10-20 ada di server b dan seterusnya
  4. auto create database untuk tenant baru
  5. backup database

yang saya lakukan

  1. pakai auto migration, ketika aplikasi nya di awal start migrations nya di jalankan ke semua database tenant.
  2. pakai sql file, ketika aplikasi nya di awal start sql nya auto di eksekusi ke semua database tenant.
  3. tambah tabel db_server di database utama, untuk routing tenant 1-10 ke server a dan 10-20 ada di server b dan seterusnya.
  4. sama pakai auto migration juga, ketika user melakukan registrasi untuk membuat tenant baru, sistem akan menjalankan migrations untuk membuat database baru
  5. -

summary kenapa saya pilih point c (satu tenant satu database)

  1. mempermudah scaling database kedepannya. karena sudah horizontal scaling.
  2. ada potensi kesalahan data antar tenant ketika semua tenant di tampung dalam 1 database, misal nya ingin query select untuk tenant 1 malah data tenant lain ikut ter select, begitu juga untuk update dan delete.

sekian terimakasih