Domanda

Ho visto applicazioni SaaS ospitato in molti modi diversi.È una buona idea per dividere funzioni e moduli su più database?Per esempio, mettere le cose come l'Utente tabella su un DB e funzione/app specifiche tabelle su un altro DB e forse altri comunemente condivisa tabelle di un altro DB?

È stato utile?

Soluzione

Iniziare con un database.I dati di divisione/funzionalità quando il progetto lo richiede.

Qui è che cosa possiamo imparare da LinkedIn:

  • Un unico database non funziona
  • L'integrità referenziale non sarà possibile
  • Qualsiasi perdita di dati è un problema
  • La cache è buono anche quando è modestamente efficaci
  • Mai sottovalutare traiettoria di crescita

Fonte:

LinkedIn architettura

Architettura di comunicazione LinkedIn

Altri suggerimenti

Elevata Scalabilità è un ottimo blog per la scalabilità delle applicazioni SaaS.Come accennato, la suddivisione delle tabelle su database come hai suggerito è generalmente una cattiva idea.Ma un concetto simile è sharding, dove si conservano le stesse (o simili) schema, ma dividere i dati su più server.Per esempio, gli utenti 1-5000 sono su server1, e gli utenti 5000-10000 sul server2.A seconda delle query utilizza l'applicazione, può essere un modo efficace per scala.

Per le applicazioni SaaS, è possibile utilizzare più database per di più gli inquilini, ma di solito non dividere modulo-saggio.

Questo è il modello più comune che ho visto in applicazione SaaS design.Il tuo schema di base è replicato per ogni inquilino che si aggiunge alla vostra applicazione.

Avere un unico database che è meglio per l'integrità dei dati perché allora è possibile utilizzare le chiavi esterne.Si può avere in questo senso l'integrità dei dati se si dividono i dati in più database.Questo non è un problema se i tuoi dati non sono correlati, ma se è correlato, sarebbe possibile per un database contenente i dati che è in contrasto con un altro database.In questo caso, si avrebbe bisogno di scrivere del codice che esegue la scansione del database di dati incoerenti su base regolare, in modo da poter gestire in modo appropriato.

Tuttavia, database multipli potrebbe essere necessario se volete che il vostro sito/applicazione per essere altamente scalabile (ad es.internet in scala).Per esempio, si potrebbe ospitare ogni database su un altro server fisico.

La suddivisione del database per caratteristiche potrebbe non essere una buona idea se non si vede una forte evidenza che suggerisce la necessità.Spesso, potrebbe essere necessario aggiornare due database come parte di un singolo operazioni e transazioni distribuite sono molto più difficile da lavorare.Inoltre, se il database deve essere suddiviso, si potrebbe essere in grado di impiegare sharding.

Ci sono una varietà di modi per farlo, ma i problemi di multi-tenancy andare più in profondità rispetto a solo il modello di dati.Odio essere collegare prodotto, ma il check-out SaaSGrid dalla mia azienda per cui lavoro in, Apprenda.Siamo un sistema operativo cloud che permette di scrittura di un singolo inquilino SOA apps (sentitevi liberi di usare NHibernate per l'accesso ai dati) che automaticamente inserisce la multi-tenancy nella tua app.Quando pubblichi la tua app, si possono fare cose come scegliere un modello di dati (isolato di database o in comune) e SaaSGrid distribuire e di conseguenza la vostra applicazione sarà eseguito senza modifiche al codice - basta scrivere il codice come se fosse un singolo inquilino!

Perché utilizzare il database ?

Credo sia una buona idea usare distribuiti sistemi di storage, come Hadoop, Voldemort (project-voldemort.com sviluppato e utilizzato da LinkedIn).

Penso db bene per sensetive dati come operazioni di denaro , ma per tutto il resto si può usare distribuito depositi.

Chiedete a voi stessi:Cosa ci guadagni spostando tutto in database separati?

Un sacco di dolore in termini di gestione sarebbe la mia ipotesi.Io sarei più vivo personalmente per avere tutto in un unico database, e se si ha colpito i problemi che non possono essere risolti da un unico database più tardi, quindi eseguire la migrazione dei dati in più database.

Mantenere un design naturale (utilizzo della denormalizzazione quanto basta per normalizzare il meno richiesto).Dividere il DB Modello nella sua moduli e mantenere il servizio orientato principi in mente con la fronte dei dati con un servizio (che detiene i dati).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top