Vantaggi e svantaggi di creare un DB per cliente [duplicato]

1

Sto iniziando a progettare un'applicazione web e sto valutando alcune decisioni relative alla sua struttura generale. Il mio caso d'uso è il seguente:

  • Ho intenzione di avere più clienti su un singolo server. Inizialmente non ci saranno molti clienti, probabilmente due per iniziare (ma il sistema dovrebbe essere pronto per ulteriori, ovviamente). Poiché lavoro come singolo sviluppatore, voglio risparmiare sui costi nei server, nei certificati SSL e così via
  • Ogni cliente può avere utenti diversi per i propri dati, con autorizzazioni diverse
  • Un cliente non dovrebbe essere in grado di accedere ai dati di altri clienti, a meno che l'altro non lo consenta esplicitamente (cioè di creare un utente per lui)

Stavo valutando come gestire questo scenario di più clienti, e al momento sto pianificando di separare ciascun cliente nel suo DB (e decidere quale DB collegarsi con l'URL del cliente, per esempio). La gestione di tutto nello stesso DB sarebbe, credo, soggetta a errori (un errore nell'app consentirebbe a un cliente di visualizzare i dati che non dovrebbe) e complicare il mio progetto (dovrei memorizzare il cliente con tutti i dati).

Quindi vorrei sapere quali sono i vantaggi e gli svantaggi associati a questo tipo di design. C'è un problema di prestazioni? Problemi di manutenzione? Problemi di sicurezza?

Se questo è importante, la mia piattaforma di scelta è Python + Flask + SQLAlchemy (anche se sto valutando anche Django)

    
posta Daniel Castro 20.04.2014 - 21:17
fonte

1 risposta

2

Ci sono potenziali problemi con l'archiviazione dei clienti nello stesso database: ne colpisci due. Il terzo che viene in mente riguarda le statistiche dei dati. Se un cliente utilizza il servizio con leggerezza e un altro pesantemente, può eliminare le statistiche per tutti, rendendo tutte le query eseguite male. L'ho già visto prima (ma solo quando la disparità è massiccia, qualcosa come cinque ordini di grandezza).

D'altra parte, separare tutti in diversi database è sicuramente un esercizio di duplicazione del codice. Tutto, incluse cose che non sono necessariamente specifiche del cliente, dovranno risiedere in ogni database. Cercare di scegliere il database corretto potrebbe essere molto complicato, specialmente quando gli utenti hanno accesso a più clienti.

La mia esperienza è che l'aggiunta di un campo cliente ad ogni tabella non è un grosso problema, e i dati errati non vengono quasi mai restituiti se diventa uno standard per filtrare sempre sul cliente. Vorrei rimanere con lo stesso DB: probabilmente avrai meno mal di testa che se hai a che fare con più database fuori sincrono.

    
risposta data 20.04.2014 - 21:45
fonte

Leggi altre domande sui tag