Il numero 1 è la migliore prestazione, il numero 3 è il peggiore. Ma in realtà, come hanno affermato molte altre risposte, questa è l'ultima cosa di cui devi preoccuparti, specialmente con la quantità di dati che hai inserito nella tua domanda.
Le cose di cui sarei preoccupato:
- Chi possiede i dati e quanto è proprietario?
- Ci saranno realisticamente cambiamenti nello schema e / o versioni live differenti?
- Che tipo di manutenzione dovresti fare?
- Qualsiasi aggregazione tra client è necessaria?
- Qual è il budget qui?
- Ci sono dei requisiti legali? Ci può essere in futuro?
Per espandere su ciascuno di questi:
Chi possiede i dati e quanto è proprietario?
Se questo è i tuoi dati, allora questo non dovrebbe essere un problema. Tuttavia, se si tratta di dati aziendali del cliente, o di qualsiasi tipo di dati personali, o di dati che non devono assolutamente perdere, il numero 3 è fuori questione. A meno che tu non abbia rinunciato alla magia per rendere illeggibile solo un sottoinsieme di righe , puoi consentire a qualsiasi client di accedere a qualsiasi altro dato dei clienti. I tuoi clienti potrebbero non apprezzarlo. Infatti, se sei un target succoso, le statistiche sul tempo di esecuzione o sulla tabella (come il numero di righe) forniscono già più informazioni di quelle che potresti voler esporre.
Il numero 2 è OK, purché le autorizzazioni e gli utenti siano corretti.
Ci saranno realisticamente cambiamenti nello schema e / o versioni live differenti?
La risposta a questa domanda è - ovviamente ci sono, prima o poi. A meno che tu non abbia solo 1 campo di testo nel tuo DB in cui metti tutto.
Ci sono modi per cambiare lo schema con garbo: assicurati che la nuova versione del codice funzioni sia con la versione precedente che con quella nuova dello schema, o viceversa. Dovrai anche assicurarti che tutti i clienti siano aggiornati tempestivamente. Tuttavia, ciò significa anche che devi forzare l'aggiornamento del client o estendere la modifica dello schema tra 2 aggiornamenti principali.
Quanto sopra si riferisce alla tua situazione? Bene, nel numero 3, devi sincronizzare tutti gli aggiornamenti di tutti i client. Questo è un incubo per non dire altro. I numeri 1 e 2 sono più semplici in questo senso, dal momento che puoi fare i client problematici uno alla volta senza disattivarli.
Il numero 3 è anche un inferno nel caso in cui uno dei client richieda una versione più vecchia dell'app, perché quella nuova non li soddisfa.
Che tipo di manutenzione dovresti fare?
Il backup è la prima cosa che viene in mente. Qui l'opzione 3 mette in ombra tutto: basta scaricare il tavolo e il gioco è fatto! Il numero 2 è OK: un backup completo del DB non è troppo difficile. Il numero 1 è sbagliato: devi configurare un backup su OGNI DB. È incredibilmente facile dimenticare o fudge qualcosa. Tuttavia, fornendo un client un backup dei loro dati su richiesta è banale in 1 e 2, ma un po 'coinvolto in 3.
Quante volte hai bisogno di cambiare query al DB? Per il numero 3 saranno più complicati - o meglio - sono semplici, ma hanno un numero incredibile di posti che puoi rovinare perché hai dimenticato AND clientId = :clientId
.
Qualunque aggregazione inter-cliente di cui hai bisogno?
Se si tratta del caso 1, è meglio sperare di avere un buon team di sviluppatori e un server aziendale. Non c'è modo di fare ciò che sia facile, affidabile e conveniente.
Il numero 2 è OK finché puoi generare correttamente le tue query.
Il numero 3 è il più semplice.
Dovresti porre la domanda al tuo dipartimento di analisi (se ne hai uno).
Qual è il budget qui?
Un sacco di DB potrebbe richiedere molte licenze. E molte porte aperte e possibilmente macchine virtuali. Questo dipende da cosa stai usando esattamente e da cosa lo ospita.
Ci sono dei requisiti legali? Ci può essere in futuro?
A volte ci sono requisiti legali su dove i dati possono fisicamente risiedere. Se tutti i tuoi clienti provengono da un paese che non dovrebbe essere un problema, dovresti farlo in tutto il mondo. Questo è particolarmente applicabile ai dati finanziari e personali.
Una domanda non menzionata qui - ci sono requisiti sulla latenza per il DB? Il tuo cliente australiano o russo potrebbe non essere molto contento delle loro domande che arrivano fino a New York (per esempio).
Un altro è la resilienza e DDoS: i servizi separati fisicamente per i client separati sono molto più difficili da rimuovere.
TL; DR
Tutto sommato - direi se lo si utilizza come piccola memoria principalmente per i dati non proprietari e non critici, e non aspettatevi una crescita eccessiva (come nella quantità di dati, non nella crescita dell'azienda) o modifica dei formati: utilizza Numero 3. Meno problemi, meno costi, meno amministratori coinvolti. Se questo si trasformerà in datastore adeguati con materiale potenzialmente permissivo in essi - usa il numero 1. Il numero 2 è da qualche parte nel mezzo.