Najlepsza odpowiedź
Tabele wyszukiwania to nie tyle „kwestia SQL”, ile są używane w projektowaniu baz danych. Zwykle są używane do normalizacji bazy danych w przypadku danych, które są względnie statyczne, takich jak tabele zawierające nazwy krajów, stanów, miast itp.
Nie jestem pewien, czy istnieje formalna, akademicka definicja „tabel przeglądowych” w kontekście projektowania bazy danych, ale kiedy o nich myślę, zwykle myślę o tabelach o następujących właściwościach:
- Zawierają w sobie dane konfiguracyjne lub opisowe, w przeciwieństwie do danych dotyczących zdarzeń w poszczególnych aplikacjach.
- Są małe w stosunku do tabel związanych ze zdarzeniami.
- Są one wstawiane i czytać tabele, a jeśli aktualizacje mają miejsce, są rzadkie.
- W większości przypadków łączenia zaczynają się lub kończą w nich.
- Często myślę o nich jako o analogiach do „Słownik” w Algorytmy kompresji słownika .
Kilka przykładów tabel przeglądowych:
- Tabele konfiguracji aplikacji.
- Geograficzne (jak wspomniano powyżej) lub inne tabele opisowe np. lista dostawców i dostawców, tabela katalogu produktów dla sklepu internetowego itp.
- Listy nazw maszyn i właściwości sprzętu maszynowego dla aplikacji zarządzającej centrum danych.
- Lista użytkowników i dane profilu użytkownika (obraz, opis użytkownika itp.) Dla witryny internetowej. Rzeczy takie jak ostatnio odwiedzana strona \_nie\_ nie znalazłyby się w tabelach wyszukiwania.
Odpowiedź
Szybkość nie jest tak naprawdę czynnikiem napędzającym przejście na bazę danych NoSQL. Jeśli weźmiesz bazy danych SQL i NoSQL obok siebie i porównasz proste aktualizacje i odczyty z tabeli, oba powinny bardzo szybko odpowiadać na takie zapytania.
Kluczową różnicą jest to, że bazy danych NoSQL są zaprojektowane specjalnie do obsługi prostych zapytania niskiego poziomu, pozwalają na pobranie, ustawienie i być może kilka innych prostych rzeczy, takich jak zakresy lub sortowanie. Dużą wadą jest to, że musisz zdecydować, w jaki sposób zamierzasz wykorzystać dane, które tam umieścisz, i z góry zaprojektować odpowiedni schemat, który pozwoli ci uzyskać dostęp do danych w wymaganym formacie.
Z drugiej strony SQL, pod warunkiem, że wprowadzone dane są poprawnie zdenormalizowane, może obsługiwać niezwykle złożone zapytania. Nie musisz projektować schematu wokół konkretnego przypadku użycia i ma on ogromną elastyczność języka zapytań, który może zwracać dowolne dane w dowolnym formacie bez konieczności modyfikowania schematu bazowego.
Powód, dla którego SQL ma reputację powolnego, ponieważ przetwarzanie złożonego zapytania w dużym zbiorze danych nieuchronnie wymaga czasu, podczas gdy NoSQL po prostu nie zapewnia możliwości uruchamiania powolnych złożonych zapytań.
Nie ma powód, dla którego nie można było używać bazy danych SQL w dokładnie taki sam sposób, jak bazy danych NoSQL. Umieść wszystkie dane w dużych tabelach i używaj tylko najbardziej podstawowych zapytań. W takim przypadku działałaby bardzo dobrze z równoważną bazą danych NoSQL, ale oczywiście marnowałaby większość jej najbardziej przydatnych funkcji. Tak jest w rzeczywistości w wielu dużych bazach danych SQL. Denormalizacja zostaje zerwana, a elastyczność poświęcona na „optymalizację” pod kątem określonych zapytań.
Jednak SQL ma pewne wady, które w pewnych okolicznościach stają się takim problemem, że jesteśmy gotowi poświęcić elastyczność, jaką zapewnia pokonać je.
Po pierwsze, nie skaluje się dobrze w poziomie. Próba podzielenia danych na wiele mniejszych maszyn, choć nie jest to niemożliwe, może mieć ogromny wpływ na wydajność. Duże bazy danych SQL zwykle działają na bardzo drogim sprzęcie o dużej mocy, aby spróbować utrzymać odpowiednią wydajność, podczas gdy bazy danych NoSQL mają tendencję do łatwego i taniego skalowania do dowolnego rozmiaru, po prostu dodając dodatkowy sprzęt do klastra.
Po drugie , a co najważniejsze, SQL nie jest odporny na błędy. Tak, możliwe jest replikowanie danych na drugiej maszynie zapasowej, ale wtedy podwoisz koszty wyspecjalizowanego sprzętu o dużej mocy, a sprzęt ten musi być jeszcze mocniejszy, aby poradzić sobie z dodatkowym obciążeniem związanym z utrzymaniem synchronizacji. Porównaj to na przykład z klastrem Cassandra, a możesz uruchomić kilkanaście mniejszych maszyn z replikacją danych, a nawet rozmieszczonych w wielu centrach danych, jeśli chcesz. Obciążenie jest automatycznie dystrybuowane, aktualizacje są wysyłane do klastra, a utrata jednej maszyny nie zostanie zauważona przez użytkownika końcowego.
Te dwa są prawdziwymi powodami, dla których należy wybrać jedną z dwóch technologii. Jeśli baza danych jest wystarczająco mała, aby zmieścić się na jednym komputerze, a sporadyczne przestoje podczas przywracania z kopii zapasowej nie stanowią problemu, użyj SQL, znacznie uprości to programowanie i zapewni elastyczność dostosowywania się, gdy zmienią się Twoje potrzeby. Jeśli Twój zbiór danych będzie ogromny lub masz wąskie umowy SLA do osiągnięcia, wybierz NoSQL. Gdziekolwiek pomiędzy, musisz dokonać oceny, ale pamiętaj, że umiejętności NoSQL są obecnie bardzo poszukiwane.Może warto pójść tą drogą, aby zdobyć doświadczenie.