Flera kunder; en värdapplikation. Du beskriver en databas med flera hyresgäster.
När du bygger en databas med flera hyresgäster måste du tänka på
- frågar
- kostnad
- dataisolering och dataskydd
- underhåll och
- återställning efter katastrof.
Multi-tenant-lösningar sträcker sig från en databas per hyresgäst (delade ingenting) till en rad per hyresgäst (delade allt).
"Delade ingenting", "separat databas" eller en databas per hyresgäst
- Dyrast per kund. (Ett stort antal klienter innebär ett stort antal servrar.)
- Högsta graden av dataisolering.
- Återställning efter katastrof för en enskild hyresgäst är enkel och okomplicerad.
- Underhåll är teoretiskt svårare, eftersom ändringar måste utföras i varje databas. Men dina dbms kan lätt stödja körning av lagrade procedurer i varje databas. (SQL Server har en odokumenterad systemlagrad procedur, sp_msforeachdb, till exempel. Du kan förmodligen skriva din egen.) "Delad ingenting" är också det enklaste anpassningsbara, men det väcker också fler underhållsproblem.
- Lägsta antal rader per tabell. Frågehastigheten är nästan optimal.
"Delat allt", eller "delat schema" eller "en databas per planet"
- Minst dyr per hyresgäst.
- Lägsta graden av dataisolering. Varje tabell har en kolumn som identifierar vilken hyresgäst en rad tillhör. Eftersom klientrader är blandade i varje tabell är det relativt enkelt att av misstag exponera andra klienters data.
- Återställning efter katastrof för en enskild hyresgäst är relativt komplicerat; du måste återställa enskilda rader i många tabeller.
- Det strukturella underhållet är enklare med tanke på att alla hyresgäster delar bord. Det ökar dock kommunikationsbelastningen eftersom du måste kommunicera och koordinera varje förändring med varje hyresgäst. Det är inte lätt att anpassa.
- Högsta antalet rader per tabell. Snabbsökning är svårare, men det beror på hur många hyresgäster och hur många rader. Du kan lätt tippa över till VLDB-territorium.
Mellan "delat ingenting" och "delat allt" står "delat schema".
"Delat schema"
- Hyresgäster delar en databas, men varje hyresgäst har sitt eget namngivna schema. Kostnaden ligger mellan "delat ingenting" och "delat allt"; stora system behöver vanligtvis färre servrar än "delat ingenting", fler servrar än "delat allt".
- Mycket bättre isolering än "delat allt". Inte riktigt lika mycket isolering som "delade ingenting". (Du kan BETYDA och ÅTERVÄNDA behörigheter för scheman.)
- Återställning efter katastrof för en enskild klient kräver att ett av många scheman återställs. Detta är antingen relativt enkelt eller ganska svårt, beroende på din dbms.
- Underhåll är lättare än "delad ingenting"; inte så lätt som "delade allt". Det är relativt enkelt att skriva en lagrad procedur som kommer att köras i varje schema i en databas. Det är lättare att dela gemensamma bord mellan hyresgäster än med "delat ingenting".
- Vanligtvis fler aktiva klienter per server än "delade ingenting", vilket innebär att de delar (försämrar) fler resurser. Men inte så illa som att "delade allt".
Microsoft har en bra artikel om arkitektur för flera klienter med mer detaljer. (Länken är till bara en sida i ett flersidigt dokument.)