Bir multi-tenant SaaS uygulaması geliştiriyorsanız, erken aşamalarda karşılaşacağınız iki önemli mimari kararı vardır: paylaşımlı veritabanı (tüm kiracılar tek bir veritabanında tenant_id sütunuyla) veya veritabanı-başına-kiracı (her kiracıya ait ayrı bir veritabanı).
WB-CRM’de veritabanı-başına-kiracı mimarisini üretimde uyguladıktan sonra, burada pratik bir karşılaştırma sunuyorum.
Paylaşımlı Veritabanı (Single-DB)
Paylaşımlı Veritabanı (Single-DB)
// Her sorguda kiracı kapsamı gerekli
Lead::where('tenant_id', $currentTenantId)->get();
// Risk: kapsamı unutur -> veri sızıntısı
Lead::all(); // Tüm kiracıların verisini döndürür!
Avantajlar: Basit migrationlar, kolay çapraz kiracı sorguları, daha düşük operasyonel karmaşıklık.
Dezavantajlar: Bir hata = çapraz kiracı veri ifşası. GDPR Madde 17 silme işlemleri karmaşık (tüm tablolar arasında kaskad). Özel örnekler sunmak zor.
Veritabanı-Başına-Kiracı
Veritabanı-Başına-Kiracı
// stancl/tenancy varsayılan veritabanı bağlantısını değiştirir
// tenant_id gerekli değildir - veritabanı KAPSAMDIR
Lead::all(); // Sadece mevcut kiracının verisini döndürür
Avantajlar: Mimari olarak veri sızıntısını imkansız hale getirir. Kiracıya göre yedekleme/restorasyon/silme işlemleri kolaydır. Özel örnekler sunabilir.
Dezavantajlar: Migrationlar N kez çalıştırılır. Çapraz kiracı sorguları bağlantı değişimi gerektirir. Daha karmaşık bağlantı havuzlama.
Pratik Gerçeklik
Pratik Gerçeklik
Migrationlar: Toplamda ~80 kiracı migrationımız var. 50 kiracı ile her dağıtımda 4,000 migration işlemi gerçekleşiyor. Bunu kuyruk işçileriyle paralel olarak gerçekleştiriyoruz:
php artisan tenants:migrate --parallel=4
Merkez vs. Kiracı Modelleri:
// Merkez model - Bağlantıyı açıkça ayarlamak ZORUNDUR
class Plan extends Model {
protected $connection = 'central';
}
// Kiracı model - $connection özelliği YOK (başlatıcıya güvenilir)
class Lead extends Model {
// stancl/tenancy bağlantı değişimini yönetir
}
İlk dikkat edilmesi gereken: Eğer merkez model üzerinde $connection = 'mysql' yerine $connection = 'central' yazarsanız, kiracı veritabanından sessizce sorgu gerçekleştirilir.
Ne Zaman Ne Seçilmeli
Ne Zaman Ne Seçilmeli
| Faktör | Paylaşımlı DB | DB-başına-Kiracı |
|---|---|---|
| Her iki yöntem de çalışır | B2B için önerilir | |
| GDPR uyumu kritik | Olası ancak daha zor | Önerilir |
| Çapraz kiracı analitiği | Kolay | Ekstra çaba gerektirir |
| Özel örnekler | Mümkün değil | Doğal bir genişleme |
| Maliyet | Daha düşük | Biraz daha yüksek |
Regüle endüstrilerde (sağlık, finans, hukuk) B2B SaaS için veritabanı-başına-kiracı, operasyonel yüküne değerdir. Milyonlarca kullanıcıya sahip B2C uygulamalarında paylaşımlı veritabanı daha mantıklıdır.
Bu kalıplarla inşa edilmiştir: WB-CRM — KOBİ’ler için ücretsiz CRM, Almanya’da barındırılmaktadır.
Kaynak: Orijinal Makale


