
Çok kiracılı bir ürün tasarlarken verilen ilk kritik karar, kiracı verisinin nasıl izole edileceğidir. Bu kararı sonradan değiştirmek neredeyse baştan yazmak demektir; o yüzden ödünleşimleri baştan bilmekte fayda var.
1. Paylaşılan şema
Tüm kiracılar aynı tabloları paylaşır, her satırda tenant_id bulunur.
Avantajı: En düşük maliyet. Bin kiracı da olsa tek veritabanı, tek şema göçü, tek bağlantı havuzu.
Riski: Tek bir WHERE tenant_id unutmak, bir müşterinin diğerinin verisini görmesi demektir. Bu yüzden satır seviyesi güvenlik (RLS) politikaları şart. Uygulama koduna güvenmeyin; veritabanı seviyesinde zorunlu kılın.
Ek sorun: Tek bir kiracının yedeğini geri yüklemek zordur. Büyük bir kiracının ağır sorguları diğerlerini etkileyebilir.
2. Şema başına kiracı
Her kiracı aynı veritabanında kendi şemasına sahiptir.
Avantajı: İzolasyon belirgin biçimde güçlü, kiracı bazlı yedekleme ve geri yükleme mümkün. Kiracıya özel alan eklemek kolaylaşır.
Maliyeti: Şema göçleri artık N kez çalıştırılmalı. 50 kiracıda sorun değil, 5.000 kiracıda göç saatler sürer ve kısmi başarısızlık yönetimi gerekir.
3. Veritabanı başına kiracı
Her kiracı ayrı veritabanı, bazen ayrı sunucu.
Avantajı: En güçlü izolasyon. Regülasyonun veri ayrımını zorunlu kıldığı durumlarda tek seçenek olabilir. Kiracıya özel coğrafi konum mümkün.
Maliyeti: İşletme yükü en yüksek seçenek. Bağlantı havuzu yönetimi, izleme ve maliyet hızla büyür. Küçük kiracılar için ekonomik değildir.
Karşılaştırma
| Kriter | Paylaşılan şema | Şema başına | DB başına |
|---|---|---|---|
| Maliyet | Düşük | Orta | Yüksek |
| İzolasyon | Orta | Yüksek | Çok yüksek |
| Göç kolaylığı | Kolay | Zor | Zor |
| Kiracı yedeği | Zor | Kolay | Çok kolay |
| Ölçek | Binlerce | Yüzlerce | Onlarca |
Hibrit yaklaşım
Pratikte en çok işe yarayan model bu: küçük ve orta müşteriler paylaşılan şemada, kurumsal müşteriler kendi veritabanında. Uygulama katmanı hangi kiracının nerede olduğunu bir yönlendirme tablosundan okur.
Bunu baştan tasarlarsanız maliyeti düşüktür. Sonradan eklemek, tüm veri erişim katmanını değiştirmek anlamına gelir.
SaaS ürünü kuruyorsanız SaaS ürün geliştirme hizmetimize bakabilirsiniz.



