Multi-tenancy - database singolo o database multipli

19

Abbiamo un numero di clienti, i cui sistemi condividono alcune funzionalità, ma hanno anche un certo grado di diversità. Il numero di clienti è in crescita - sempre una cosa salutare! - e anche la diversità tra le loro attività è in aumento.

Al momento esiste un singolo sito Web ASP.Net (Web Forms) (diversamente dal progetto web), che ha sottocartelle per ogni tenant, con le pagine non standard di quel tenant. Esiste un progetto di modello separato, che si occupa dell'accesso al database e della logica aziendale.

Quale è preferibile - e, soprattutto, perché - tra avere (a) 1 database per cliente, con solo le caratteristiche associate a quel client; oppure (b) un singolo database condiviso da tutti i client, in cui solo un sottoinsieme di tabelle viene utilizzato da qualsiasi client.

Le principali preoccupazioni all'interno dell'azienda sono finite:

  • manutenzione di più risorse - backup, controllo di versione e simili
  • promuovere il riutilizzo il più possibile

Come faresti a garantire che tali preoccupazioni vengano affrontate, quale soluzione è preferibile e perché? (Sto anche compilando le risposte a domande simili)

    
posta RichardW1001 23.03.2012 - 22:07
fonte

5 risposte

10

Se si utilizza SQL Server, utilizzare un database ma utilizzare schemi. Usa dbo per cose che sono generali per tutti i client e crea uno schema per ogni client e rendilo lo schema predefinito per gli utenti da quel client. Ora è possibile avere un oggetto generale (ad esempio un getBudget proc) nello schema dbo e uno personalizzato per il client nello schema con lo stesso nome.

    
risposta data 23.03.2012 - 22:22
fonte
4

Poiché i database e le funzionalità dei client sono divergenti, significa che a un certo punto finiranno per essere sistemi diversi, quindi in questo caso consiglierei sistemi separati poiché i costi di mantenimento delle personalizzazioni per ciascun client supereranno i benefici di un singolo sistema di database.

I singoli sistemi di database sono i migliori per quando le modifiche tra clienti diversi sono solo configurazioni ma non funzionalità aggiuntive per ogni cliente.

    
risposta data 24.03.2012 - 10:13
fonte
3

Ti mancano alcune preoccupazioni. I problemi arriveranno con la crescita. Se si può supporre che un giorno crescerai più di un server DB, un database complesso ti causerà sicuramente un mal di testa. A meno che non investiate in architettura in anticipo. Ma è anche un passaggio costoso)

Quindi, non dimenticare che è sia molte volte più economico e molte volte più semplice scalare pochi database diversi da quelli enormi)

    
risposta data 23.03.2012 - 22:19
fonte
1

Un'area che non ho visto indirizzato nelle risposte è il problema con la protezione corretta di un'applicazione DB multi-tenant. Le app multi-tenant devono essere progettate con molta cura per evitare problemi di sicurezza. La maggior parte dei database e delle app forniscono un isolamento completo, ma non completo: esistono in genere modi per inferire direttamente o indirettamente i dati tra gli schemi DB. E molte risorse condivise (registri e altri file, tabelle DBA, cursori ...) che possono, per lo meno, portare ad attacchi di Denial of Service facili su altri tenant e in genere molto di più.

    
risposta data 25.07.2018 - 02:43
fonte