· 2 dk okuma

Çok kiracılı uygulamalarda veritabanı stratejileri

Ortak şema, kiracı başına şema ve kiracı başına veritabanı yaklaşımları; hangisi hangi durumda mantıklı, bedeli nedir?

  • Mimari
  • SaaS
  • SQL Server

Aynı uygulamayı birden fazla firmaya sunduğunuzda ilk mimari sorulardan biri şudur: her firmanın verisi nerede duracak? Üç yaygın yaklaşım vardır.

1. Ortak veritabanı, ortak şema

Tüm firmaların kayıtları aynı tablolarda durur; her satırda bir TenantId sütunu bulunur ve her sorgu bu değere göre süzülür.

  • Artısı: En ucuz ve işletmesi en kolay seçenektir. Tek şema, tek migration.
  • Eksisi: İzolasyon tamamen kodun doğruluğuna bağlıdır. Tek bir unutulmuş filtre, başka firmanın verisinin görünmesi demektir. Bir firmanın verisini yedeklemek, taşımak ya da silmek zordur.

2. Ortak veritabanı, kiracı başına şema

Her firma için ayrı bir şema açılır. İzolasyon veritabanı katmanında başlar, ama migration'lar şema sayısı kadar çalıştırılmalıdır.

3. Kiracı başına veritabanı

Her firmanın kendi veritabanı vardır. Uygulama, isteğin hangi firmaya ait olduğunu çözer ve doğru bağlantıya yönelir.

  • Artısı: Güçlü izolasyon. Bir firmanın yedeği, geri dönüşü, taşınması ve silinmesi tek veritabanı işlemidir. Büyük bir firma diğerlerini yavaşlatmaz.
  • Eksisi: Operasyon yükü. Çok sayıda veritabanının migration'ı, izlenmesi ve yedeklenmesi otomatikleştirilmelidir.

Hangisini seçmeli?

Soru Eğilim
Firmalar küçük, sayıları çok, veri hassasiyeti düşük mü? Ortak şema
Müşteriler verilerinin ayrı olduğunu güvence olarak istiyor mu? Kiracı başına veritabanı
Firma bazında geri yükleme ya da taşıma gerekecek mi? Kiracı başına veritabanı
Operasyon ekibi küçük mü? Ortak şema ya da şema başına

Kiracıyı çözmek: asıl kritik nokta

Hangi yaklaşım seçilirse seçilsin, isteğin hangi kiracıya ait olduğu bir kez, merkezi bir yerde (ASP.NET Core'da genellikle bir middleware) belirlenmeli ve kod boyunca taşınmalıdır. İki ilke önemlidir:

  • Sessiz geri dönüş (fallback) yoktur. Kiracı çözülemezse veya karşılık gelen veritabanı bulunamazsa istek reddedilir; "varsayılan veritabanına bağlan" gibi bir davranış, verinin yanlış yere yazılması riskini doğurur.
  • Kiracı bilgisi kullanıcının kontrol ettiği bir değerden değil, doğrulanmış kimlik bilgisinden (ör. oturum anahtarındaki talep) gelmelidir.

Bizim tercihimiz

Deha ERP'de her firma kendi veritabanında çalışır ve kiracı çözümleyici isteği doğru veritabanına yönlendirir. Bunun nedeni verinin firmalar arasında net biçimde ayrılması ve firma bazında yedekleme ve geri dönüşün kolay olmasıdır. Bunun karşılığında migration ve yedekleme süreçlerini otomatik tutmak gerekir. Ayrıntılar için Deha ERP güvenlik dokümanına bakabilirsiniz.

WhatsApp ile yazın