multitenancy con alcuni dati condivisi

3

Sono in fase di pianificazione di una nuova webapp e mi sto appoggiando con forza a un modello di multi-tenancy. L'app ha una funzione di archiviazione file, in cui l'utente può caricare (e operare su) file.

Vorrei la possibilità per l'utente di condividere questi file, comunque. In che modo questo viene tipicamente realizzato in un modello multi-tenant?

L'esempio sarebbe qualcosa come Google Documenti. Ogni utente ha i propri file; possono modificare, taggare e creare collezioni con questi file. Quindi, possono condividere un documento o una raccolta con qualcun altro per la collaborazione.

Se ogni utente ha il proprio database e tabelle, quale strategia si userebbe per consentire questo tipo di condivisione riducendo al minimo la duplicazione di file e metadati associati?

    
posta meecect 12.06.2012 - 16:12
fonte

2 risposte

1

Vuoi un singolo database, un unico archivio di file.

Più database sono solo la strada da percorrere se hai un'app che non è progettata per la multitenancy e non è fattibile adattarla per utilizzare un singolo database.

Se hai un'entità logica sparsa su più di un database, il database non sarà in grado di rafforzare l'integrità e dovrai affrontare i problemi causati da questo - e questo è solo uno dei tanti problemi che avrai .

Avere un singolo database per un'app multi-tenant non è un problema quando si progetta l'app da zero - richiede sicuramente più lavoro per isolare davvero i diversi tennant [cioè tutte le tue domande avranno bisogno di una condizione cliente = xxx, e non puoi dimenticartene], ma è certamente qualcosa di meno fastidioso che avere più database.

Una volta che hai un singolo database, è solo una questione di design dello schema e relazioni n-m (cioè 1 documento può appartenere a n utenti, 1 utente può avere m documenti).

Se si dispone di uno schema normalizzato, la duplicazione dei dati non sarà presente, per definizione:)

    
risposta data 27.06.2012 - 21:01
fonte
0

Dovrai evitare di duplicare i file e gestire i meccanismi di blocco e le risoluzioni dei conflitti come risultato. Puoi seguire un modello in cui i diritti di modifica sono condivisi su un file anziché duplicare il file che deve essere modificato da un'altra parte.

La condivisione dei diritti di modifica può essere migliorata con la collaborazione consentendo a più utenti di modificare lo stesso documento nello stesso momento (se l'app ha tale funzione) e aiuta gli utenti a evitare di sovrascrivere le modifiche reciproche. È possibile evitare il problema di sovrascrittura mantenendo ovviamente una cronologia di salvataggi, ma nella mia esperienza, un utente potrebbe non notare che è stato appena effettuato un aggiornamento a un documento su cui stava lavorando o caricato, a meno che l'interfaccia utente non lo faccia risaltare.

    
risposta data 12.06.2012 - 18:34
fonte

Leggi altre domande sui tag