Mysql
 sql >> база данни >  >> RDS >> Mysql

Трябва да актуализирам базата данни за едно потребителско приложение, за да разрешавам множество потребители, как да променя схемата на базата данни?

Множество клиенти; едно хоствано приложение. Вие описвате база данни с няколко наематели.

Когато създавате база данни с множество наематели, трябва да вземете предвид

  • запитване
  • цена
  • изолиране и защита на данни
  • поддръжка и
  • възстановяване при бедствия.

Решенията за множество наематели варират от една база данни на наемател (споделено нищо) до един ред на наемател (споделено всичко).

„Нищо споделено“, „отделна база данни“ или една база данни на наемател

  • Най-скъпо на клиент. (Големият брой клиенти предполага голям брой сървъри.)
  • Най-висока степен на изолация на данните.
  • Възстановяването при бедствия за един наемател е просто и лесно.
  • Поддръжката е теоретично по-трудно, защото промените трябва да се извършват във всяка база данни. Но вашите dbms може лесно да поддържат изпълнение на съхранени процедури във всяка база данни. (SQL Server има недокументирана системна съхранена процедура, sp_msforeachdb, например. Вероятно можете да напишете своя собствена.) „Нищо споделено“ също е най-лесно персонализираното, но това също поражда повече проблеми с поддръжката.
  • Най-малък брой редове на таблица. Скоростта на заявка е почти оптимална.

„Споделено всичко“, или „споделена схема“, или „една база данни на планета“

  • Най-малко скъпо на наемател.
  • Най-ниска степен на изолация на данните. Всяка таблица има колона, която идентифицира на кой наемател принадлежи даден ред. Тъй като редовете на наемателите са смесени във всяка таблица, е сравнително лесно да се разкрият случайно данните на други наематели.
  • Възстановяването при бедствия за един наемател е сравнително сложно; трябва да възстановите отделни редове в много таблици.
  • Поддръжката на конструкцията е по-лесна, като се има предвид, че всички наематели споделят масите. Това обаче увеличава комуникационното натоварване, защото трябва да общувате и координирате всяка промяна с всеки наемател. Не е лесно персонализиран.
  • Най-голям брой редове на таблица. Бързото запитване е по-трудно, но зависи от това колко наематели и колко реда. Можете лесно да се преобърнете на територията на VLDB.

Между „споделено нищо“ и „споделено всичко“ е „споделена схема“.

„Споделена схема“

  • Наемателите споделят база данни, но всеки наемател има своя собствена схема с име. Разходите са между „споделено нищо“ и „споделено всичко“; големите системи обикновено се нуждаят от по-малко сървъри от „споделено нищо“, повече сървъри от „споделено всичко“.
  • Много по-добра изолация от „споделено всичко“. Не толкова изолация, колкото „не споделя нищо“. (Можете да ПРЕДОСТАВЯТЕ и ОТМЕНЯТЕ разрешения за схеми.)
  • Възстановяването при бедствия за един наемател изисква възстановяване на една от многото схеми. Това е или сравнително лесно, или доста трудно, в зависимост от вашата база данни.
  • Поддръжката е по-лесна от „нищо споделено“; не е толкова лесно, колкото "сподели всичко". Сравнително лесно е да се напише съхранена процедура, която да се изпълнява във всяка схема в база данни. По-лесно е да споделяте общи маси между наематели, отколкото с „нищо споделено“.
  • Обикновено по-активни наематели на сървър, отколкото „не споделиха нищо“, което означава, че споделят (понижават) повече ресурси. Но не толкова лошо, колкото „сподели всичко“.

Microsoft има добра статия за архитектура с множество наематели с повече подробности. (Връзката е само към една страница от многостраничен документ.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да комбинирате данни от множество таблици с помощта на SQL?

  2. mysql замества символите с ударение

  3. Създаване на динамична заявка в съхранена процедура MySQL

  4. Как мога да изчистя дублиращи се записи в таблица с архивирани записи

  5. Печат за време с точност до милисекунда:Как да ги запишете в MySQL