I DB multi-tenant hanno più database o tabelle condivise?

17

È un database multi-tenant:

  • Un server DB con un database / schema diverso (identico) per ciascun cliente / titolare; o
  • Un server DB con un database / schema in cui i clienti / inquilini condividono i record all'interno delle stesse tabelle?

Ad esempio, con l'Opzione # 1 sopra, potrei avere un server MySQL a, diciamo, mydb01.example.com , e potrebbe avere un database customer1 al suo interno. Questo database customer1 potrebbe avere, diciamo, 10 tabelle che alimentano la mia applicazione per quel particolare cliente (Cliente # 1). Potrebbe anche avere un database customer2 con le stesse stesse 10 tabelle, ma contenente solo i dati per il Cliente n. 2. Potrebbe avere un database customer3 , un database customer4 e così via.

Nell'opzione # 2 sopra, ci sarebbe solo un singolo database / schema, diciamo, myapp_db , di nuovo con 10 tabelle (come sopra). Ma qui, i dati per tutti i clienti esistono all'interno di quelle 10 tabelle, e quindi "condividono" le tabelle. E a livello di applicazione, controllo della logica e della sicurezza a cui i clienti hanno accesso a quali record in queste 10 tabelle, e viene prestata la massima attenzione affinché il Cliente n. 1 non acceda mai all'app e veda i dati del Cliente n. 3, ecc.

Quale di questi paradigmi costituisce un tradizionale DB "multi-tenant"? E se nessuno dei due, allora qualcuno può fornirmi un esempio (usando gli scenari descritti sopra) di cosa sia un DB multi-tenant?

    
posta smeeb 19.01.2017 - 16:20
fonte

2 risposte

23

Which of these paradigms constitutes a traditional "multi-tenant" DB

Entrambi i concetti sono chiamati multi-tenancy, poiché è solo un concetto logico "in cui una singola istanza di software gira su un server e serve più tenant" (da Wikipedia ). Ma come implementi questo concetto "fisicamente" dipende da te.

Naturalmente, l'applicazione ha bisogno di un concetto di database che permetta di separare i dati dei diversi tenant e l'idea di multi-tenancy è di condividere alcune risorse del server (almeno l'hardware) per un migliore utilizzo delle risorse, e amministrazione più semplice. Quindi un "multi-tenant DB" è uno che supporta direttamente questo , dove parti del modello di database o tabelle sono condivise.

Per essere precisi, è possibile creare un'applicazione multi-tenant con un DB non multi-tenant, fornendo una singola istanza DB per client. Tuttavia, questo preclude di condividere le risorse DB direttamente tra i titolari e il livello dell'applicazione deve assicurarsi di connettere il titolare giusto al database corretto.

    
risposta data 19.01.2017 - 16:24
fonte
27

Secondo Microsoft, il termine ha 3 significati potenziali (un database per tutti gli inquilini o un database per inquilino).

Per usare il tuo esempio, ogni cliente sarebbe il proprio inquilino.

  1. Un database per tenant (cliente)

    • Ogni inquilino è isolato dagli altri (nessun accesso accidentale ai dati degli altri inquilini)
    • L'isolamento semplifica anche la gestione del ripristino dei dati e l'adeguamento delle esigenze di archiviazione per le esigenze degli inquilini.
  2. Un database condiviso, schema separato.

    • Ogni inquilino ha il proprio schema e i suoi dati sono nelle proprie tabelle.
    • Il ripristino può richiedere più tempo, poiché tutti si trovano nello stesso database, non è possibile ripristinare il database solo in un backup precedente (ripristinerebbe i dati di ogni tenant). Un'opzione è di ripristinare un nuovo database e quindi unire / copiare solo i dati dei 1 tenant.
  3. Un database condiviso, schema condiviso.

    • I dati di ogni inquilino si trovano nelle stesse tabelle. Ad esempio, se tieni traccia degli ordini, gli ordini di tutti gli inquilini si trovano in "dbo.Orders".
    • I dati degli inquilini sono separati da una colonna in ogni tabella (potrebbe essere TenantId), che mostra il proprietario della riga.

Ci sono pro e contro per ciascuno, ben spiegati in questo articolo: link

Bonus: puoi pensarlo come abitazione (grossolanamente semplificata).

  1. Ogni inquilino ha la propria casa. Possono fare tutto quello che vogliono e, se si brucia, non ha alcun effetto su nessun altro.

  2. Ogni inquilino si trova nello stesso edificio, ma ha un proprio appartamento.

  3. Tutti vivono nello stesso appartamento e tutto il materiale è contrassegnato con una nota adesiva per mostrare chi lo possiede.

risposta data 19.01.2017 - 16:30
fonte

Leggi altre domande sui tag