2010-07-19 15 views
12

Pracuję z aplikacją, w której przechowujemy dane naszych klientów w oddzielnych bazach danych SQL dla każdego klienta. Jak dotąd działało to świetnie, zdarzało się nawet, że jakiś zły kod wybrał nieprawidłowe identyfikatory klientów z bazy danych, a ponieważ jedyne dane w bazie danych należały do ​​tego klienta, szkody nie były tak złe, jak mogły być. Moje obawy dotyczą liczby baz danych, które realistycznie posiadasz na serwerze SQL.Ile jest zbyt wielu baz danych na serwerze SQL?

Czy istnieje dodatkowy narzut dla każdej tworzonej bazy danych? W końcu trafiliśmy na ścianę, na której mamy tylko wiele baz danych na jednym serwerze? Specyfikacja SQL Server mówi, że możesz mieć coś w rodzaju 32000 baz danych, ale czy to możliwe, czy ktoś ma dużą liczbę baz danych na jednym serwerze i jakie są problemy, które napotykasz.

Dzięki,

Frank

+0

Zastanawiam podobną konfigurację dla hosted aplikacji mamy obecnie rozwijających się, więc każdy prawdziwe historie wojenne byłyby bardzo mile widziane :) – elo80ka

+0

Do tej pory pomysł sprawdził się bardzo dobrze, ale wymaga wielu narzędzi do obsługi. Na przykład mamy aplikację admin do tworzenia nowych stron oraz narzędzie do importu/eksportu, aby przenosić klientów z jednego serwera na drugi. Przenoszenie było głównie do debugowania, ale w przyszłości planujemy mieć dwa serwery prod, które wykorzystamy do zrównoważenia obciążenia. – Frank

+0

Innym doskonałym efektem ubocznym oddzielnych baz danych dla każdego klienta jest to, że zmusza on do zaprojektowania resetowalnego środowiska, w którym można szybko utworzyć nowe wystąpienie aplikacji i przeprowadzić testy jednostkowe/ręczne przeciwko niemu. – Frank

Odpowiedz

13

górne granice

  • przestrzeni dysku
  • pamięci
  • konserwacji

Przykłady:

  • odbudowa indeksów 32K baz? Gdy?
  • W przypadku 10% z 32k baz każdy ma aktywnego zestawu danych w pamięci 100MB w jednym czasie, jesteś już w 320 GB pamięci serwera docelowego
  • wiedząc co DB nawiązaniu zbyt
  • ...

skuteczna granica zależy od obciążenia, zużycia, rozmiaru bazy danych itp

EDIT: i przepustowości jak wspomniano Wyatt Barnett .. zapomniałem o sieci, każdy gardłem zapomina o ...

+2

Jestem pewien, że istnieje faktyczny limit liczby DB, ale jak już mówisz, znacznie szybciej osiągniesz praktyczny limit zasobów. – CJM

+0

czyli dla pamięci, ma jedną bazę danych z 500 MB danych różniących się od posiadania 5 baz danych po 100 MB danych? Czy ilość pamięci wymaga struktury bazy danych? – Frank

+0

@Frank: jeśli wszystkie używane w tym samym czasie, nie. To dane w bazie danych, a nie struktura, która zajmuje miejsce – gbn

2

ISP rutynowo mieć jeden serwer bazy danych, która jest dzielona przez setki lub tysiące baz danych.

7

Największym problemem związanym z wieloma bazami danych jest ich synchronizacja podczas wprowadzania zmian w schemacie. Jeśli chodzi o realistyczną liczbę baz danych, które możesz mieć i system działa dobrze, jak zwykle to zależy. To zależy od tego, jak potężny jest serwer i jak duże są bazy danych. Prawdopodobnie chciałbyś mieć wiele serwerów w pewnym momencie, nie tylko dlatego, że będzie on szybszy dla twoich klientów, ale dlatego, że narazi na ryzyko mniejszą liczbę klientów, jeśli coś stanie się z serwerem. W którym momencie może decydować tylko twoja firma. Z pewnością, jeśli zaczniesz otrzymywać wiele limitów czasu, może być wskazany inny serwer (lub naprawienie słabych zapytań może to również zrobić). Duzi klienci często płacą premię za przebywanie na oddzielnym serwerze, więc weź pod uwagę ceny. Mieliśmy jednego klienta tak paranoicznego na temat swoich danych, że musieliśmy mieć oddzielny serwer, który nie był nawet zlokalizowany razem z innymi serwerami. Zapłacili za to duże pieniądze, bo musieliśmy wynająć dodatkową przestrzeń.

2

Architektonicznie jest to odpowiednia rozmowa w ogóle. Widziałeś pierwszą ogromną zaletę - często szkody mogą być ograniczone do jednego klienta i masz prawie zerowe ryzyko, że klient dostanie się do danych innego klienta. Ale brakuje ci dużej przewagi - nie musisz przechowywać wszystkich klientów na tym samym serwerze bazy danych. Kiedy staniesz się wystarczająco duży, że twój serwer cierpi, możesz odciążyć klientów do innego pudełka całkowicie przy minimalnym wysiłku.

Założę się również, że zabraknie przepustowości, aby zarządzać bazami danych, zanim skończy się serwer, aby obsłużyć więcej baz danych. . .

1

Wiem, że to stary wątek, ale jest to ta sama struktura, którą stosowaliśmy w ciągu ostatnich 2 lat i obecnie uruchamiamy 1768 baz danych na 3 serwerach.

mamy następujący setup (nieuwzględnione lustra i tak dalej): Serwery gospodarskich

  • 2 internetowych i 4 serwerów treści
  • instancja
  • SQL tylko na głównej bazy danych klientów, która jest odpytywany, gdy uzyskać dostęp do strony internetowej za pomocą identyfikatora, aby uzyskać serwer/instancję i nazwę bazy danych, na której znajdują się ich dane. To jest następnie przechowywane w bilecie uwierzytelniania.
  • 3 Serwery SQL do obsługi baz danych klientów z rozkładaniem obciążenia podczas tworzenia w oparciu o aktualną całkowitą liczbę uczniów, które istnieją we wszystkich bazach danych na każdym serwerze (szybko obliczane przez pole numeru licencji w głównej bazie danych).
  • Na każdym serwerze SQL istnieje mniejsza konfiguracja głównej bazy danych, która zawiera współdzielone dane statyczne, które są używane przez wszystkich klientów, umożliwiając w ten sposób mniejsze bazy danych klientów i szybszą aktualizację zawartości.

Najważniejszą rzeczą, o której mowa powyżej, jest synchronizacja struktur bazy danych! Do tego doszedłem do programowania małej wersji Windows .NET, która wyszukuje wszystkich klientów w głównej bazie danych i wklejasz kod do wykonania, a następnie przejdzie przez proces pobierania bazy danych i wykonania SQL.

Tworzenie nowych klientów również powodowało dla nas pewne problemy, więc zakończyłem programowanie systemu zarządzania dla naszych sprzedawców i stworzyłem nową bazę danych opartą na kopii zapasowej nieaktywnej "pustej" bazy danych, dlatego mamy najnowszą DB bez potrzeby ponownego skryptowania całego skryptu tworzenia bazy danych. Następnie wstawia dane klienta do głównej bazy danych z lokalizacją, w której utworzono bazę danych, i przeprowadza migrację starych danych ze starej wersji naszego oprogramowania. Wszystko to odbywa się na osobnej instancji przed przeniesieniem, zmniejszając w ten sposób wszelkie blokady SQL.

Przechodzimy teraz do pojedynczej bazy danych dla naszej kolejnej wersji oprogramowania, ponieważ redundancja bazy danych jest prawie niemożliwa w przypadku tak wielu baz danych! Jest to ogromna rzecz, którą należy wziąć pod uwagę, ponieważ SQL tworzy kilka zadań oczekujących, które odzwierciedlają dane w bazie danych, po rozpoczęciu mnożenia baz danych, które wymykają się spod kontroli, a system niemal wyłącznie ma za zadanie synchronizację i może się zablokować ze względu na ścinanie. Liczba wątków. Patrz strona 30 dokumentu poniżej Microsoft:

SQLCAT's Guide to High Availability Disaster Recovery.pdf

Mam jednak mieć wątpliwości, przeniósł się do jednej bazy danych, z powodu pewnych obaw, jak wspomniano powyżej, takie jak stale sprawdzając w każdej procedurze, że obecny klient ma dostęp tylko do ich danych, a także rzeczy podobne do jednego małego problemu będą teraz dotyczyć każdej pojedynczej bazy danych, takiej jak indeksowanie tabel i tak dalej.Również z chwilą, gdy nasz klient jest rozłożony na 3 serwery, ale pojedyncza baza danych będzie oznaczać, że mamy redundancję, ale jeśli błąd był w bazie danych, a nie na serwerze, to każdy klient traci, a nie tylko 1 bazę danych klientów.

Podsumowując, zależy to od tego, co robisz i jeśli chcesz uzyskać nadmiarowość; dla mnie redundancja jest teraz kluczowa i wszystko inne w idealnym świecie nie powinno się zdarzyć (np. błąd, który powoduje błędy w bazie danych dla wszystkich). Zaczynaliśmy od oczekiwania setki lub więcej, aby przejść do systemu ze starego, hostowanego oprogramowania, które szybko zmieniło się w 200,500,1000,1500 ... Mamy obecnie ponad 750 000 użytkowników korzystających z naszego systemu każdego roku, aw sierpniu/wrześniu mieć ponad 15 000 jednoczesnych użytkowników online (spodziewając się w tym roku 20 000 trafień).

nadzieję, że to jest pomocne dla kogoś wzdłuż linii :-)

Pozdrawiam

Liam

+0

Wow, to dużo baz danych! Skończyło się na tym, że wdrażałem tę strukturę również w projekcie, nad którym pracowałem i napotkałem te same pułapki. Tego typu konfiguracja wymaga znacznie więcej architektury i niestandardowych narzędzi, a następnie jednego systemu baz danych, więc każdy, kto rozważa, ostrzega, nie jest dla osób o słabym sercu. – Frank

+0

Całkowicie zgadzam się z tym słowem "nie dla ludzi o słabych nerwach", ponieważ musimy tak wiele dostosowywać, aby ułatwić życie. Dostosowałem procedury tworzenia kopii zapasowych do tworzenia kopii zapasowych i przesyłania każdej kopii zapasowej do pamięci Amazon S3. Tak jak mówię, głównym punktem przełomowym dla mnie jest to, że po prostu nie możemy zaoferować nadmiarowości w tym modelu, bez ciężkiego ręcznego wprowadzania danych w celu przemieszczania ludzi po bazach danych. –

Powiązane problemy