7

Jakie są najlepsze praktyki w zakresie projektowania baz danych i normalizacji dla witryn o dużym natężeniu ruchu, takich jak stackoverflow?Normalizacja lub denormalizacja w witrynach o dużym natężeniu ruchu

Czy należy używać znormalizowanej bazy danych do przechowywania danych, znormalizowanej techniki lub kombinacji obu?

Czy sensownym rozwiązaniem jest zaprojektowanie znormalizowanej bazy danych jako głównej bazy danych do przechowywania zapisów, aby zmniejszyć nadmiarowość i jednocześnie zachować inną, zdenormalizowaną formę bazy danych do szybkiego wyszukiwania?

lub

powinien być główny bazy danych znormalizowanych nieznormalizowana ale z widokiem na poziomie aplikacji dla szybkich operacji na bazach danych?

lub inne podejście?

Odpowiedz

5

Denormalizacja bazy danych w celu zmniejszenia liczby połączeń wymaganych w przypadku intensywnych zapytań jest jednym z wielu różnych sposobów skalowania. Konieczność mniejszej liczby połączeń oznacza mniej intensywne podnoszenie przez bazę danych, a dysk jest tani.

To powiedziawszy, za niedorzeczne ilości ruchu dobre relacyjne osiągi db mogą być trudne do osiągnięcia. Z tego powodu wiele większych stron korzysta z przechowywania wartości kluczy (np. Memcached) i innych mechanizmów buforujących.

The Art of Capacity Planning jest całkiem niezła.

+4

Disk Space jest tani, ale wydajność dysku z pewnością nie jest. Dzięki denormowanemu projektowi często kończy się wstawianie lub aktualizowanie większej ilości danych na szerszych tabelach, co często powoduje problemy z wydajnością. –

+1

To prawda, istnieją kompromisy przy każdej decyzji. To, co jest wydajne, zależy od struktury danych. – BaroqueBobcat

1

pierwsze: Określ dla siebie, co oznacza ruch hight-:

  • 50,000 Page-Viewss dziennie?
  • 500 000 Strona-liczba wyświetleń dziennie?
  • 5.000.000 Strona-liczba wyświetleń dziennie?
  • więcej?

Niż to przeliczyć na pobalbe szczytowe wyświetlenia stron na minutę i na sekundę. Po tym pomyśl o danych, które chcesz zapytać na widok strony. Czy dane są buforowane? Jak dynamiczne są dane, jak duże są dane?

Przeanalizuj swoje indywidualne wymagania, zaprogramuj kod, wykonaj test obciążenia, zoptymalizuj. W większości przypadków, zanim konieczne będzie skalowanie serwerów baz danych, należy skalować serwery WWW.

Relacyjna baza danych może być, jeśli w pełni zoptymalizowana, niezwykle szybka, przy dołączaniu do stołów!

Relacyjna baza danych może być rzadko trafiana, gdy ma się pojawiać jako back-end, wypełnić pamięć podręczną lub wypełnić niektóre denormalizowane tabele danych. Nie uczyniłbym denomralizacji podejściem domyślnym.

(Wspomniałeś wyszukiwania spojrzeć np Lucene lub coś podobnego, jeśli potrzebujesz wyszukiwania pełnotekstowego.)

Najlepszym najlepszych praktyk odpowiedź jest zdecydowanie: Zależy ;-)

0

Dla projektu, nad którym pracuję, przeszliśmy na zdenormalizowaną trasę stołu, ponieważ spodziewamy się, że nasze główne tabele będą miały wysoki współczynnik zapisów do odczytów (zamiast wszystkich użytkowników trafiających w te same tabele, zdenormalizowaliśmy je i ustawić każdy "zestaw użytkownika", aby użyć określonego fragmentu).Możesz przeczytać http://highscalability.com/, aby zobaczyć przykłady tego, jak "duże strony" radzą sobie z woluminem - niedawno opublikowano Stack Overflow.

10

Uderzenie wydajności łączenia często jest zawyżone. Produkty bazodanowe, takie jak Oracle, są zbudowane tak, aby łączyć się bardzo wydajnie. Łączenia są często uważane za niekorzystne, gdy prawdziwym winowajcą jest słaby model danych lub słaba strategia indeksowania. Ludzie zapominają także, że denormalizowane bazy danych działają bardzo źle, jeśli chodzi o wstawianie lub aktualizowanie danych.

Kluczową rzeczą, o której należy pamiętać, jest rodzaj aplikacji, którą budujesz. Większość znanych stron internetowych nie przypomina zwykłych aplikacji korporacyjnych. Dlatego Google, Facebook, itp. Nie korzystają z relacyjnych baz danych. Ostatnio było dużo dyskusji na ten temat, które są I have blogged about.

Więc jeśli budujesz stronę internetową, która przede wszystkim dostarcza sześciennych półsystemowych treści, prawdopodobnie nie chcesz używać relacyjnej bazy danych, zdenormalizowanej lub w inny sposób. Ale jeśli tworzysz wysoce transakcyjną stronę internetową (taką jak bank internetowy), potrzebujesz projektu, który gwarantuje bezpieczeństwo i integralność danych, i robi to dobrze. Oznacza to relacyjną bazę danych w co najmniej trzeciej normalnej formie.

0

Nie ma znaczenia, jeśli nie buforujesz poprawnie.

Powiązane problemy