PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Schematy PostgreSQL dla aplikacji wielodostępnych

Wydajność niekoniecznie jest gorsza. Jak wyjaśniono w artykule, istnieją określone warunki, które sprawiają, że schemat jest lepszy lub gorszy w zależności od projektu aplikacji i obciążenia. Pozwólcie, że wyjaśnię kompromisy między podejściem „schematu dzierżawcy” a „wspólnym stołem”:

Schemat najemcy jest najlepsze, gdy masz stosunkowo małą liczbę dość dużych najemców. Przykładem może być aplikacja księgowa, z tylko płatnymi użytkownikami subskrypcji. Rzeczy, które sprawiają, że jest to lepsza opcja dla Ciebie, to:

  • mała liczba najemców, każdy z dużą ilością danych
  • stosunkowo prosty schemat bez wielu tabel na najemcę
  • konieczność dostosowania schematów niektórych najemców
  • możliwość korzystania z ról bazy danych na dzierżawcę
  • wymaganie migracji danych najemcy z jednego serwera na drugi
  • możliwość uruchomienia dedykowanego serwera aplikacji w Twojej chmurze dla każdego najemcy

Rzeczy, które sprawiają, że jest to słaba opcja, to:

  • wielu najemców z bardzo małą ilością danych
  • bezstanowe podejście do połączeń, w których każde żądanie może być dowolnym dzierżawcą
  • biblioteka klienta lub orm, który buforuje metadane dla wszystkich tabel (np. ActiveRecord)
  • wymaganie wydajnego, wysokowydajnego pulowania połączeń i/lub buforowania
  • problemy z VACUUM i innymi operacjami administracyjnymi PostgreSQL, które słabo skalują się w tysiącach tabel.

To, czy schemat dzierżawy jest zły dla migracji/zmian schematu, naprawdę zależy od tego, jak je wykonujesz. Jest to złe dla szybkiego wdrażania uniwersalnej zmiany schematu, ale dobre dla wdrażania zmian schematu jako stopniowego wdrażania wśród najemców.

wspólny stół działa lepiej w sytuacjach, gdy masz wielu dzierżawców, a wielu dzierżawców ma bardzo mało danych. Przykładem może być mobilna aplikacja społecznościowa, która pozwala na darmowe konta, a tym samym ma tysiące porzuconych kont. Inne rzeczy, które sprawiają, że model wspólnego stołu jest korzystny to:

  • lepiej dla puli połączeń, ponieważ wszystkie połączenia mogą korzystać z tej samej puli
  • lepsze dla administracji PostgreSQL, z powodu mniejszej liczby tabel
  • lepsze dla migracji i zmian schematu, ponieważ istnieje tylko jeden „zestaw” tabel

Główną wadą udostępnionej tabeli jest konieczność dołączania warunku filtru dzierżawcy do każdego pojedynczego zapytania w warstwie aplikacji. Jest to również problematyczne, ponieważ:

  • zapytania, które łączą wiele tabel, mogą mieć niską wydajność, ponieważ filtr dzierżawy odrzuca planowanie zapytań
  • tabele, które rosną do 100 milionów wierszy, mogą powodować określone problemy z wydajnością i konserwacją
  • nie ma możliwości wprowadzania zmian aplikacji specyficznych dla dzierżawy lub aktualizacji schematu
  • droższa migracja najemców między serwerami

Tak więc, który model „działa lepiej” naprawdę zależy od tego, które kompromisy szkodzą Ci najbardziej.

Istnieje również model hybrydowy „tenant-view”, w którym rzeczywiste dane są przechowywane we wspólnych tabelach, ale każde połączenie aplikacji korzysta z widoki barier bezpieczeństwa aby wyświetlić dane. Ma to pewne kompromisy każdego modelu. Przede wszystkim ma zalety związane z bezpieczeństwem modelu schematu dzierżawcy z niektórymi wadami wydajności obu modeli.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyczyścić komentarze z surowego pliku sql

  2. Zagreguj wartości logiczne do wartości true, jeśli którakolwiek z kolumn źródłowych ma wartość true

  3. Sprawdzenie minimalnej zmienności w R lub PostgreSQL

  4. Dlaczego zapytanie nie zapisuje się w pliku csv, podczas gdy w konsoli postgresql wygląda to normalnie?

  5. Dlaczego nie mogę zainstalować psycopg2? (Python 2.6.4, PostgreSQL 8.4, OS X 10.6.3)