Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wiele baz danych kontra pojedyncza baza danych z logicznie podzielonymi danymi

Żałujesz, że nie używałeś oddzielnych baz danych:

  • Jeśli kiedykolwiek będziesz chciał przyznać uprawnienia do samych baz danych klientom lub superużytkownikom.
  • Jeśli kiedykolwiek będziesz chciał przywrócić bazę danych tylko jednego klienta bez wpływu na dane innych.
  • Jeśli istnieją obawy regulacyjne dotyczące naruszenia danych i danych, a poniewczasie odkryjesz, że przepisy te można spełnić tylko dzięki osobnym bazom danych. (Aktualizacja:nieco ponad 4 lata po napisaniu tej odpowiedzi RODO weszło w życie)
  • Jeśli kiedykolwiek zechcesz łatwo przenieść dane klientów na wiele serwerów baz danych lub w inny sposób skalować lub przenieść większych/ważniejszych klientów na inny sprzęt. W innej części świata.
  • Jeśli kiedykolwiek będziesz chciał łatwo archiwizować i likwidować stare dane klientów.
  • Jeśli Twoim klientom zależy na silosowaniu ich danych i dowiedzą się, że Ty zrobiłeś inaczej.
  • Jeśli Twoje dane są wezwane i trudno jest wyodrębnić dane tylko jednego klienta, lub wezwanie sądowe jest zbyt szerokie i musisz stworzyć całą bazę danych zamiast tylko danych dla jednego klienta.
  • Gdy zapomnisz zachować czujność i prześlizgnie się tylko jedno zapytanie, które nie zawierało AND CustomerID = @CustomerID . Wskazówka:użyj skryptowego narzędzia uprawnień lub schematów, albo otocz wszystkie tabele widokami zawierającymi WHERE CustomerID = SomeUserReturningFunction() lub ich kombinację.
  • Gdy uzyskasz nieprawidłowe uprawnienia na poziomie aplikacji, a dane klienta zostaną udostępnione niewłaściwemu klientowi.
  • Gdy chcesz mieć różne poziomy ochrony kopii zapasowych i odzyskiwania dla różnych klientów.
  • Kiedy zdasz sobie sprawę, że budowanie infrastruktury do tworzenia, udostępniania, konfigurowania, wdrażania i w inny sposób rozkręcania nowych baz danych jest warte inwestycji, ponieważ zmusza Cię do osiągnięcia w tym dobrego.
  • Gdy nie uwzględniłeś możliwości, że jakaś klasa ludzi potrzebuje dostępu do danych wielu klientów i potrzebujesz warstwy abstrakcji na wierzchu Customer ponieważ WHERE CustomerID = @CustomerID teraz go nie przetnie.
  • Gdy hakerzy atakują Twoje witryny lub systemy, a Ty ułatwiłeś im uzyskanie wszystkich danych wszystkich klientów za jednym zamachem po uzyskaniu danych logowania administratora w zaledwie jednym baza danych.
  • Kiedy tworzenie kopii zapasowej bazy danych trwa 5 godzin, a następnie kończy się niepowodzeniem.
  • Kiedy musisz pobrać wersję Enterprise swojego DBMS, aby móc tworzyć skompresowane kopie zapasowe, dzięki czemu kopiowanie pliku kopii zapasowej przez sieć zajmuje mniej niż 5 godzin więcej .
  • Kiedy musisz codziennie przywracać całą bazę danych na serwer testowy, co zajmuje 5 godzin, i uruchamiać skrypty weryfikacyjne, których ukończenie zajmuje 2 godziny.
  • Gdy tylko kilku Twoich klientów potrzebuje replikacji i musisz zastosować ją do wszystkich swoich klientów, a nie tylko do tych kilku.
  • Gdy chcesz zająć się klientem rządowym i dowiadujesz się, że wymaga on użycia oddzielnego serwera i bazy danych, ale Twój ekosystem został zbudowany wokół jednego serwera i bazy danych i jest to po prostu zbyt trudne lub zmiana zajmie zbyt dużo czasu .

Będziesz zadowolony, że korzystasz z osobnych baz danych:

  • Kiedy wdrożenie pilotażowe dla jednego klienta całkowicie eksploduje, a pozostałych 999 klientów nie ma żadnego wpływu. I możesz przywrócić z kopii zapasowej, aby rozwiązać problem.
  • Gdy jedna z kopii zapasowych Twojej bazy danych nie powiedzie się i możesz naprawić tylko tę w 25 minut, zamiast rozpoczynać cały 10-godzinny proces od nowa.

Żałujesz, że nie używałeś jednej bazy danych:

  • Kiedy odkryjesz błąd, który dotyczy wszystkich 1000 klientów, a wdrożenie poprawki do 1000 baz danych jest trudne.
  • Gdy uzyskasz nieprawidłowe uprawnienia na poziomie bazy danych, a dane klienta zostaną udostępnione niewłaściwemu klientowi.
  • Gdy nie zezwoliłeś na możliwość, że jakaś klasa ludzi potrzebuje dostępu do podzbioru wszystkich baz danych (być może połączenie dwóch klientów).
  • Kiedy nie zastanawiałeś się, jak trudno byłoby połączyć dwie różne bazy danych.
  • Kiedy połączysz dwie różne bazy danych i zdasz sobie sprawę, że jedna była niewłaściwa i nie planowałeś odzyskiwania z tego scenariusza.
  • Gdy spróbujesz przekroczyć 32 767 klientów/baz danych na jednym serwerze i przekonasz się, że jest to maksimum w SQL Server 2012.
  • Kiedy zdasz sobie sprawę, że zarządzanie ponad 1000 baz danych jest większym koszmarem, niż kiedykolwiek sobie wyobrażałeś.
  • Kiedy zdasz sobie sprawę, że nie możesz wprowadzić nowego klienta tylko przez dodanie danych do tabeli i musisz uruchomić kilka przerażających i skomplikowanych skryptów, aby utworzyć, wypełnić i ustawić uprawnienia w nowej bazie danych.
  • Kiedy musisz codziennie wykonywać 1000 kopii zapasowych bazy danych, upewnij się, że wszystkie się powiodły, skopiuj je przez sieć, przywróć je wszystkie do testowej bazy danych i uruchom skrypty sprawdzania poprawności na każdym z nich, zgłaszając wszelkie awarie w sposób, który zagwarantuje, że będą widoczne, a które można łatwo i szybko wykonać. A potem 150 z nich ulega awarii w różnych miejscach i trzeba je naprawiać pojedynczo.
  • Kiedy dowiesz się, że musisz skonfigurować replikację dla 1000 baz danych.

To, że wymieniłem więcej powodów dla jednego, nie oznacza, że ​​jest lepszy.

Niektórzy czytelnicy mogą uzyskać wartość z MSDN:Multi -Architektura danych najemcy . A może Wzorce projektowania aplikacji dzierżawy SaaS . Lub nawet Programowanie dla wielu dzierżawców Aplikacje dla chmury, 3. edycja



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Żaden proces nie znajduje się na drugim końcu potoku (SQL Server 2012)

  2. Jak zidentyfikować pierwszą lukę w wielu zakresach dat rozpoczęcia i zakończenia dla każdego odrębnego elementu w T-SQL?

  3. Utwórz więcej niż jeden indeks nieklastrowany w tej samej kolumnie w SQL Server

  4. Invoke-Sqlcmd :Wystąpił błąd związany z siecią lub specyficzny dla wystąpienia podczas nawiązywania połączenia z programem SQL Server

  5. Używając T-SQL, zwróć n-ty oddzielony element z łańcucha