Bazy danych do testów porównawczych

14

Widzę wiele dyskusji na temat wydajności db 'x' lub tego, że przejście z 'x' na 'y' poprawiło wydajność naszej strony.

Jeszcze nie widziałem właściwego testu porównawczego, który działa w różnych typach baz danych.

  1. Czy jest możliwe napisanie sensownego testu porównawczego, który mógłby być wykorzystywany w wielu typach baz danych, takich jak relacyjny, zorientowany na dokument itp.

  2. Jak poszedłbyś zaprojektować taki benchmark?

Dan McGrath
źródło
Jako przykład poziomu szczegółowości wymagałbym poważnego potraktowania jakiegokolwiek testu porównawczego baz danych w tym artykule autorstwa Yahoo Research. Naprawdę nie mam dla ciebie dobrej odpowiedzi, poza tym podejrzewam, że kompromisy WPR i asymetria są głównym powodem, dla którego bazy danych do testów porównawczych są tak cholernie trudne.
yannis

Odpowiedzi:

19

Krótka odpowiedź

Tak , możesz napisać znaczący punkt odniesienia dla badanego przypadku, jeśli zrobisz to ostrożnie, i zrozum, że jeśli jest to istotne dla konkretnego przypadku, może nie być tak w innych przypadkach. Dotyczy to również porównywania baz danych tego samego typu (relacyjna baza danych vs. inna relacyjna baza danych) lub baz różnych typów.

Nie , nie można napisać testu porównawczego, który w magiczny sposób udowodni, że konkretna baza danych jest lepsza niż inna w każdym przypadku dla każdej aplikacji.

Długa odpowiedź

Zdecydowanie można powiedzieć, że „przejście z bazy danych do innej poprawiło wydajność naszej witryny”.

  1. Mierzysz wydajność poprzedniej bazy danych poprzez profilowanie lub statystyki wykonawcze, zbierając wystarczającą ilość informacji o zapytaniach i ich szybkości.

  2. Przenosisz aplikację do nowej bazy danych.

  3. Robisz te same środki.

  4. Porównujesz

Na przykład, jeśli pełna lista 3 182 432 produktów załadowanych w 2.834 s. na starej bazie danych i ładuje się w 0,920 s. w nowej bazie danych, biorąc pod uwagę, że w obu przypadkach aplikacja ma pustą pamięć podręczną, jest to wygrana: nowa baza danych poprawiła wydajność witryny w zakresie tego zapytania.

Teraz, jak każda miara wydajności, jest tendencyjna:

  • Uzgodnione, nowe zapytanie jest szybsze. Ale poczekaj, Twój DBA nie wiedział, jak korzystać z bazy danych, którą posiadałeś wcześniej , więc zapytanie, które ładuje wszystkie produkty, nie jest zoptymalizowane . Jeśli przepiszesz go w ten sposób, będziesz mógł załadować te produkty w 0,855 s. zamiast 2.834.

  • Ok, masz lepszy wynik. Ale czy nie uważasz, że niesprawiedliwe jest porównywanie bazy danych ze świeżymi danymi właśnie opróżnionymi do 10-letniej bazy danych, dla której ostatni plan konserwacji został uruchomiony trzy lata temu? Nawiasem mówiąc, czy nie uważasz, że powinieneś był aktualizować produkt bazy danych przynajmniej raz w ciągu ostatnich czterech lat?

  • Niektóre zapytania są szybsze. Niektóre są wolniejsze. Jak obliczyć średni wynik, aby wiedzieć, że ogólnie osiągnąłeś wydajność po przejściu do nowej bazy danych? Ok, czas ładowania wszystkich 3 182 432 produktów jest krótszy. Ale czy to ma znaczenie, gdy zapytanie jest wykonywane w witrynie tylko w rzadkich przypadkach, gdy administrator wykonuje jakieś konkretne zadanie, które wykonał tylko dwa razy w ciągu ostatnich dziesięciu lat? Z drugiej strony wykonywanie wszystkich zapytań na stronie głównej dla nowego użytkownika marnuje 0,281 s. z nową bazą danych, kiedy wynosiła ona 0,207 s. ze starą bazą danych. Ten wynik ma o wiele większe znaczenie, tym bardziej, że zapytania te nie mogą być buforowane przez długi czas i są wykonywane dziesiątki tysięcy razy dziennie.

  • Obie bazy danych muszą być testowane na tych samych serwerach , tym samym sprzęcie, tej samej strukturze. Na przykład nie można przetestować jednej bazy danych na jednym dysku twardym, a drugiej na macierzy RAID1 dwóch dysków SSD. Gdy migrujesz duży projekt do nowej bazy danych, istnieje szansa, że ​​po prostu będziesz hostować nową bazę danych na stu innych nowo wdrożonych serwerach stelażowych, gdy poprzednia baza danych pozostanie na poprzednich komputerach.

Podsumowując, możesz przeprowadzić analizę porównawczą zapytań do bazy danych aplikacji i uzyskać dokładne pomiary . Ale musisz nadać znaczenie liczbom. W tym stanie kuszące jest stwierdzenie, że zyskałeś wydajność witryny: w przeciwnym razie kierownictwo byłoby wściekłe, gdybym dowiedział się, że wydałeś tysiące dolarów i miesięcy pracy, aby spowolnić pracę.

Najstraszniejszym błędem jest wyciągnięcie tych wniosków z testów porównawczych i wyciągnięcie jakiejś głupoty, takiej jak „Microsoft SQL Server jest trzy razy szybszy niż Oracle”: mówiąc, że to tak, jakby powiedzieć, że „Java jest lepsza niż PHP”. Zdefiniuj lepiej. Lepiej w jakich przypadkach? Do jakiego rodzaju aplikacji? Dla jakiego zespołu programistów?

Im więcej interpretujesz i uogólniasz, tym bardziej rzecz staje się nieistotna i bez znaczenia.

Zapytanie, select [...]które można znaleźć w wersji # 832 w pliku ProductFactory.cs, wiersz 117 wykonuje się w ciągu 0,5 s. z nową bazą danych podczas testowania w warunkach określonych w wymaganiach niefunkcjonalnych, załącznik M, przypadek 3. Pozwala to na spełnienie niefunkcjonalnego wymagania 527 (patrz strona 80, wersja 9). Ten sam wymóg nie był spełniony w poprzedniej bazie danych, gdy wyniki testu były w zakresie 0,9..1,3 s. w tych samych warunkach.

ma znaczenie dla programisty i jest wystarczająco precyzyjny, aby wiedzieć, co zostało przetestowane, jak i jakie były wyniki. To odpowiada na twoje pytanie nr 2.

Niestety zarządzanie nie ma żadnego sensu. Zamiast:

Migracja naszego produktu z MySQL do najnowszej wersji Microsoft SQL Server poprawiła ogólną wydajność naszego produktu o pięć, zmniejszając jednocześnie koszty o dwa i wpływ na środowisko o trzy. Wierzymy, że migracja wszystkich naszych aplikacji do Microsoft SQL Server w przyszłym roku przyniesie jeszcze lepsze wyniki i zwiększy naszą konkurencyjność na rynku.

to czysty marketingowy jibber-jabber i technicznie nic nie znaczy, ale zaskakująco ma wartość dla działów zarządzania i marketingu.

Wreszcie, czy możemy porównać różne typy baz danych? Powiedziałbym, że jest to całkowicie możliwe. Załóżmy, że mam stronę internetową z dużymi zdjęciami. Te zdjęcia są przechowywane w varbinary(max)Microsoft SQL Server 2005 (więc nie mogę użyć filestream). Niepokoi mnie wydajność podczas ładowania tych zdjęć, dlatego postanowiłem zapisać je jako pliki, używając systemu plików jako mojej nowej bazy danych. Po pierwsze, pliki te są przechowywane na tym samym komputerze co baza danych. Profiluję nowe rozwiązanie i uzyskuję wynik, który pokazuje, że w moim przypadku pliki są ładowane o 4% szybciej z systemu plików niż z Microsoft SQL Server. Benchmark jest bardzo jasny. Teraz mogę pomyśleć o wdrożeniu dedykowanego serwera zoptymalizowanego pod kątem bezpośredniego przechowywania plików, zamiast używania serwera zoptymalizowanego pod kątem Microsoft SQL Server.

Arseni Mourzenko
źródło
2
  1. Biorąc pod uwagę wszystkie pieniądze, o które toczy się gra z głównymi firmami bazodanowymi i dużą grupą programistów zajmujących się aplikacjami bazodanowymi typu open source, gdyby był na to sposób, już by to wymyślili (i wysadzili wyniki w Internecie. ).

  2. Nie zrobiłbym tego. Zamiast tego utwórz konkretne testy porównawcze dla określonych potrzeb i środowisk.

W pewnym momencie dostępna ilość pieniędzy i wiedza projektanta na temat konkretnej bazy danych może bardziej niż cokolwiek określić ograniczenia. Dobry Oracle dba wykona większość młodszych programistów, niezależnie od wybranej platformy.

JeffO
źródło
1

Nie, różnice między nimi są takie, że każdy punkt odniesienia byłby stronniczy.

To powiedziawszy, opracowanie strony takiej jak Computer Language Benchmarks Game , która zawiera szeroki zakres testów i ułatwia porównywanie testów (testów specyficznych dla języka lub kompozytów wielu języków), przyniosłoby pewne korzyści (w przynajmniej w moich oczach), zwłaszcza jeśli został on skonfigurowany, aby społeczność mogła zgłaszać rozwiązania i usuwać niedociągnięcia w schematach lub zapytaniach.

W przypadku strony wzorcowej DB zamiast implementacji algorytmów (jak w przypadku strzelaniny językowej) testy mogą składać się z surowych danych, które należy przechowywać, a następnie pobierać zgodnie z określonymi ograniczeniami. Na przykład może istnieje zestaw surowych danych, który zawiera informacje reprezentujące prosty schemat reprezentujący to, czego biblioteka społeczności może użyć do śledzenia klientów i książek. Każda baza danych musi przechowywać wszystkie 1 milion rekordów, a następnie pobierać niektóre podzestawy danych, które spełniają ograniczenia. Następnie może istnieć zestaw danych, który reprezentuje bardzo prostą strukturę / relację (być może system komentarzy zwykle używany w witrynach takich jak ESPN itp.), Który zawiera 100 milionów rekordów i ma własny zestaw zapytań, które należy wykonać . Itp.

Testowanie baz danych w szerokim zakresie zestawów danych (od złożonych do prostych relacji, od małych zestawów do ogromnych) może okazać się bardzo pomocne, ponieważ przynajmniej będziesz w stanie zobaczyć ogólne tendencje w przypadku danych, które mają cechy podobne do projektu, w którym jesteś obecnie oceniam.

AdamJonR
źródło
0

Chciałbym dodać jeszcze kilka powodów, dla których nie można porównywać wszystkich typów baz danych.

  1. Istnieją dwa główne kierunki systemów baz danych: OLAP i OLTP (patrz porównanie ).

  2. Jak powiedziałeś, istnieją również systemy baz danych oparte na relacjach i dokumentach. Podczas gdy RDBS ściśle przestrzega zasady ACID , w większości DBS zorientowanych na dokumenty możesz zdecydować, że wystarczające dane są wystarczające dla twojej aplikacji. To znacznie ułatwia blokowanie i planowanie.

Krótko mówiąc: nie argumentowałbyś, że Lamborghini jest najlepszym samochodem na świecie . Pomyśl o objętości bagażnika, liczbie miejsc lub przebiegu.

Na marginesie: Oto punkt odniesienia dla systemów baz danych OLTP.

Matthias
źródło