sql >> Database teknologi >  >> RDS >> Mysql

Har du brug for at opdatere min enkeltbruger-appdatabase for at tillade flere brugere, hvordan ændres databaseskemaet?

Flere klienter; én hostet applikation. Du beskriver en database med flere lejere.

Når du bygger en database med flere lejere, skal du overveje

  • forespørger
  • omkostninger
  • dataisolering og -beskyttelse
  • vedligeholdelse og
  • katastrofegendannelse.

Multi-lejer løsninger spænder fra én database pr. lejer (delt intet) til en række pr. lejer (delt alt).

"Delt intet", "separat database" eller én database pr. lejer

  • Dyreste pr. klient. (Store antal klienter indebærer et stort antal servere.)
  • Højeste grad af dataisolering.
  • Disaster recovery for en enkelt lejer er enkel og ligetil.
  • Vedligeholdelse er teoretisk sværere, fordi ændringer skal udføres i hver database. Men dine dbms understøtter muligvis nemt at køre lagrede procedurer i hver database. (SQL Server har en udokumenteret systemlagret procedure, f.eks. sp_msforeachdb. Du kan sikkert skrive din egen.) "Delt intet" er også den lettest tilpasselige, men det rejser også flere vedligeholdelsesproblemer.
  • Laveste antal rækker pr. tabel. Forespørgselshastigheden er næsten optimal.

"Delte alt", eller "delt skema" eller "én database pr. planet"

  • Best dyrt pr. lejer.
  • Laveste grad af dataisolering. Hver tabel har en kolonne, der identificerer, hvilken lejer en række tilhører. Da lejerrækker er blandet i hver tabel, er det relativt nemt ved et uheld at afsløre andre lejers data.
  • Disaster recovery for en enkelt lejer er relativt kompliceret; du skal gendanne individuelle rækker i mange tabeller.
  • Strukturel vedligeholdelse er enklere, da alle lejere deler borde. Det øger dog kommunikationsbelastningen, fordi du skal kommunikere og koordinere hver ændring med hver lejer. Det er ikke nemt at tilpasse.
  • Højeste antal rækker pr. tabel. Hurtig forespørgsel er sværere, men det afhænger af, hvor mange lejere og hvor mange rækker. Du kan nemt vælte ind i VLDB-området.

Mellem "delt intet" og "delt alt" er "delt skema".

"Delt skema"

  • Lejere deler en database, men hver lejer har sit eget navngivne skema. Omkostningerne falder mellem "delt intet" og "delt alt"; store systemer har typisk brug for færre servere end "delt intet", flere servere end "delt alt".
  • Meget bedre isolation end "delt alt". Ikke helt så meget isolation som "delte ingenting". (Du kan TILDELE og TILBAGE tilladelser på skemaer.)
  • Katastrofegendannelse for en enkelt lejer kræver gendannelse af et af mange skemaer. Dette er enten relativt nemt eller ret svært, afhængigt af din dbms.
  • Vedligeholdelse er nemmere end "delt intet"; ikke så let som at "dele alt". Det er relativt enkelt at skrive en lagret procedure, der udføres i hvert skema i en database. Det er nemmere at dele fælles borde blandt lejere end med "delt ingenting".
  • Normalt flere aktive lejere pr. server end "delte intet", hvilket betyder, at de deler (forringer) flere ressourcer. Men ikke så slemt som "delt alt".

Microsoft har en god artikel om multi-tenant arkitektur med flere detaljer. (Linket er kun til én side i et flersidet dokument.)




  1. Tilføjelse af ADO.NET Entity Data Model i VS 2017, og der sker ikke noget

  2. mysqldump-tabel uden at dumpe den primære nøgle

  3. Opgradering af PostgreSQL 11 til PostgreSQL 13 med TimescaleDB og PostGIS i Linux ved hjælp af pg_upgrade

  4. Undgå duplikerede poster til en tabel ved hjælp af PHP