Wiem, że Shopify używa tylko jednej bazy danych dla wszystkich sklepów. Ale w jaki sposób mogą obsługiwać swoją bazę danych przy tak dużych danych? Czy to dobry pomysł, aby użyć jednej bazy danych dla ponad 50 000 sklepów?
sql-server
database-design
Farid Movsumov
źródło
źródło
Odpowiedzi:
Cóż, tak naprawdę zależy to od schematu, objętości itp. Czym dokładnie jest sklep? Czym różni się od przechowywania danych około 50 000 kotów lub 50 000 produktów lub 50 000 orzechów skrzydełkowych?
Istnieje kilka powodów (innych niż sam aspekt wielkości), dlaczego możesz nie chcieć przechowywać danych dla 50 000 różnych klientów w jednej bazie danych, jeśli rzeczywiście dane mogą być całkowicie posegregowane przez klienta (nie włączając tabel wyszukiwania takich jak kody pocztowe lub tabele specyficzne dla aplikacji, które mogłyby przejść do jednej centralnej bazy danych):
jeśli jeden klient przerośnie aplikację, nie ma łatwego sposobu na wyodrębnienie tylko swoich danych i przeniesienie ich do innej instancji, serwera itp. w celu skalowania, chyba że planujesz z wyprzedzeniem i partycjonujesz na coś podobnego
CustomerID
i masz 50 000 grup plików (jesteś ograniczony w każdym razie do 15 000 partycji lub 1000, jeśli korzystasz ze starszej wersji programu SQL Server, a zbyt duża grupa plików może być katastrofalna ). Należy również pamiętać, że partycjonowanie wymaga wersji Enterprise.jeśli okaże się, że wszyscy twoi klienci są po prostu zbyt duzi dla tego przypadku, skalowanie oznacza pozyskiwanie nowego sprzętu i przenoszenie do niego całej bazy danych (i potencjalnie robienie tego ponownie).
usunięcie klienta może być równie bolesne, ponieważ będziesz musiał usunąć niektóre% wierszy z bardzo dużych tabel, a to nie będzie tanie.
prawdopodobnie będziesz mieć szeroką dystrybucję danych klientów (jeden klient z miliardem wierszy, inny klient z 5000). Może to prowadzić do takich rzeczy, jak wąchanie parametrów i szkodliwa wydajność obejmująca liczność i jakość planu (ponieważ prawdopodobnie ponownie użyjesz tych samych planów dla tych samych zapytań wobec bardzo różnych zestawów danych).
wszyscy twoi klienci podlegają dokładnie takim samym umowom SLA i HA / DR. Albo masz całą bazę danych w trybie pełnego odzyskiwania z n-minutowymi kopiami zapasowymi dziennika, albo jesteś prosty i polegasz na pełnych + różnicowych kopiach zapasowych. Jeśli musisz przywrócić z powodu błędu klienta lub chcesz przywrócić bazę danych do punktu w czasie, wpływa to na każdego klienta.
mogą wystąpić błędy w pobieraniu danych - błędy, w których na przykład klauzule mogą prowadzić do tego, że jeden klient widzi dane innego klienta lub wszystkie dane innych klientów.
mogą wystąpić konsekwencje prawne (niektóre firmy będą miały ścisłe wymagania, aby nie umieszczać ich danych w tej samej bazie danych, co każda inna firma, a zwłaszcza konkurentów).
jeśli bezpieczeństwo danych jednego klienta jest ważne, wówczas osiągnięcie tego jest znacznie łatwiejsze przy użyciu separacji bazy danych niż separacji w tabeli.
Niektóre zalety posiadania każdego klienta w osobnej bazie danych (lub przynajmniej posiadania wielu baz danych, każda dla grupy klientów):
DROP DATABASE
.Pewne wady:
źródło