MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak porównać MongoDB z YCSB?

Mówiąc o charakterystyce wydajności systemu, większość dostawców DBaaS ogranicza się do dostarczania informacji o sprzęcie, na którym są obsługiwane ich systemy. Rzeczywiście trudno jest dokładnie mówić o rzeczywistej charakterystyce przepustowości/opóźnień wdrożenia opartego na chmurze, biorąc pod uwagę liczbę zmiennych w takim systemie. Środowiska zwirtualizowane, nieprzewidywalne obciążenia, opóźnienia w sieci, różne regiony geograficzne to tylko niektóre z rozważań.

Jednak dobrym pomysłem jest rzetelne zrozumienie rzeczywistej wydajności wdrożenia MongoDB:dzięki czemu można dokładnie alokować w oparciu o potrzeby aplikacji; dzięki czemu możesz faktycznie porównać różnych dostawców DBaaS, aby upewnić się, że otrzymujesz jak najwięcej „zadania”.

Ten blog jest wprowadzeniem do przeprowadzania podstawowych testów wydajności w klastrze MongoDB. Omawia szczegółowo, jak skonfigurować i uruchomić testy porównawcze YCSB oraz interpretować wyniki. Inspiracją do tego był niedawny blog MongoDB o ulepszeniach wydajności w MongoDB 3.0.

YCSB to popularna specyfikacja Java open source i pakiet programów opracowany przez Yahoo! aby porównać względną wydajność różnych baz danych NoSQL. Jego obciążenia są wykorzystywane w różnych badaniach porównawczych baz danych NoSQL.

Konfigurowanie YCSB

Ta i kolejne sekcje poprowadzą Cię krok po kroku przez proces konfiguracji, konfiguracji i uruchamiania testów YCSB w Twoim ulubionym systemie dostawcy DBaaS.

W celu przeprowadzenia testów obciążenia będziesz potrzebować komputera klienckiego, najlepiej w tej samej lokalizacji geograficznej co klaster MongoDB, aby uniknąć opóźnień w Internecie. Wybierz konfigurację, która ma przyzwoitą ilość soku, aby uruchomić wiele wątków, aby odpowiednio załadować klaster Mongo. Maszyna musi mieć zainstalowaną najnowszą wersję Java, Maven i git.

Kroki:

  • Jeśli Java, Maven lub git nie są jeszcze zainstalowane w Twoim systemie, zainstaluj je. Zapoznaj się z dokumentacją dostępną dla konkretnego systemu operacyjnego. Upewnij się, że zainstalowałeś wersję Maven zgodną z twoją wersją Java. Sprawdź, czy wszystkie zależności działają poprawnie. Na przykład
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • Jak sugeruje strona Github YCSB, możesz pobrać archiwum tar YCSB. Ale zalecamy budowanie go ze źródła. Kroki są udokumentowane w pliku README MongoDB firmy YCSB. Pomoże nam to później włączyć uwierzytelnianie MongoDB dla Twojego dostawcy chmury.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Uwaga:jeśli Twój `mvn clean package` lub `mvn clean install` polecenie nie powiedzie się z powodu błędów w zlokalizowaniu pakietu „mapkeeper”, usuń lub skomentuj 2 wystąpienia wpisów „mapkeeper” w pom.xml na poziomie głównym. Spójrz na ten numer Github, aby uzyskać więcej informacji.
  • Gdy kompilacja się powiedzie, możesz teraz uruchomić testy YCSB!

Włączanie uwierzytelniania

Większość dostawców MongoDB domyślnie zapewnia uwierzytelnianie MongoDB i nie ma możliwości jego wyłączenia. Niestety, YCSB obecnie nie obsługuje uwierzytelniania MongoDB. Sama implementacja klienta wykorzystuje głównie obecnie przestarzałe wywołania API. Aby sprostać naszym potrzebom, dodaliśmy nową właściwość MongoDB YCSB, 'mongodb.auth' wraz z kilkoma linijkami kodu do obsługi. Zmiany są bardzo proste, a diff można znaleźć tutaj. Domyślne właściwości YCSB MongoDB są wymienione tutaj.

Zbuduj pakiet ponownie za pomocą mvn ponownie po zakończeniu zmian. Zapoznaj się z sekcją powyżej, jak zbudować YCSB za pomocą Maven.

Przeprowadzanie testów

Ta sekcja wiki YCSB zawiera szczegółowe zestawienie następnych i kolejnych działań. Opiszemy je tutaj pokrótce wraz z innymi wskazówkami.

  • Następnym krokiem jest wybranie rodzaju obciążenia, które chcesz uruchomić. Poświęć trochę czasu na przeczytanie i zrozumienie sekcji Podstawowe obciążenia w wiki YCSB. Są one podsumowane tutaj:
    • Obciążenie A:Zaktualizuj duże obciążenie:50/50% mieszanka odczytów/zapisów
    • Obciążenie B:obciążenie głównie czytaniem:95/5% mieszanka odczytów/zapisów
    • Zadanie C:Tylko do odczytu:100% odczytów
    • Zadanie D:Przeczytaj najnowsze zadanie:Większy ruch przy ostatnich wstawkach
    • Zadanie E:Krótkie zakresy:Zapytania oparte na krótkim zasięgu
    • Zadanie F:odczyt-modyfikacja-zapis:odczytywanie, modyfikowanie i aktualizowanie istniejących rekordów
  • Oczywiście poszczególne zadania można dostosować za pomocą podstawowych właściwości. Możesz wybrać obciążenie i dostosować właściwości, aby dopasować coś, co pasuje do charakterystyki Twojej aplikacji. (To badanie porównawcze wybrało kilka interesujących „dopracowanych” obciążeń). Zapoznaj się również z blogiem MongoDB, o którym wspomnieliśmy w pierwszej sekcji. (Nasz test wykryje obciążenie A z domyślnymi współczynnikami odczytu/aktualizacji).
  • Wybierz liczbę operacji (Właściwość „liczba operacji”), aby sam test działał przez odpowiedni czas. Testy, które kończą się w ciągu 30 minut, nie mogą być dobrymi wskaźnikami ogólnej wydajności systemu.
  • Wybierz odpowiednią liczbę wątków, które powinien uruchomić YCSB. To naprawdę zależy od tego, jak dobre są twoje komputery klienckie, jak duże obciążenie może przyjąć klaster MongoDB i jak reprezentatywny jest dla twojej rzeczywistej aplikacji. Przeprowadzimy nasze testy porównawcze z różnymi wątkami.
  • Uruchom fazę ładowania. Wybierz liczbę rekordów (Właściwość „liczba rekordów”) do wstawienia do bazy danych, która jest zbliżona do liczby operacji, które zamierzasz na niej uruchomić. Wybierz odpowiednią liczbę wątków, aby wkładanie nie trwało zbyt długo. Na przykład
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load Flaga ‘ wskazuje, że jest to uruchomienie obciążenia.
    • s ‘ flaga wyświetla status co 10 sekund
    • recordcount ‘ jest ustawiony na 10 milionów.
    • threads ‘ ustawia liczbę wątków klienta na 16.
    • mongodb.auth ‘ to właściwość, którą napisaliśmy, aby umożliwić uwierzytelnianie MongoDB.
  • Pamiętaj o
    • Przekieruj standardowe wyjście do pliku.
    • Użyj „screen ‘ lub równoważną metodę, aby Twoja sesja nie została utracona podczas wykonywania tych operacji
  • Po zakończeniu fazy ładowania danych możesz przystąpić do uruchamiania swoich obciążeń. Na przykład
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • Powtórz przebiegi z różną liczbą wątków. Pamiętaj o przekierowaniu wyników, aby móc je później porównać. Dla m.in. powtórzyliśmy nasze testy dla 2, 4, 8, 16 i 32 wątków.

Analiza wyników

Ostatnia sekcja tej strony wiki YCSB mówi o analizowaniu wyników. Najciekawsze informacje to całkowita przepustowość i 95/99% opóźnienia w procentach. Zwykle zwiększanie liczby wątków zwiększa przepustowość do czasu, gdy zyski spłaszczą się, a opóźnienia staną się nie do zaakceptowania. Dla m.in. oto wykres przepustowości i opóźnień w porównaniu z liczbą wątków dla systemu testowego, który próbowaliśmy przetestować. Wybranym obciążeniem było obciążenie A i około 3 miliony operacji.

Z wykresu można wywnioskować, że 16 wątków jest prawdopodobnie „najlepszym punktem” z punktu widzenia obciążenia dla tego serwera MongoDB:poza nim linia przepustowości jest płaska, nawet w przypadku wykładniczego wzrostu liczby wątków, podczas gdy opóźnienia rosną i stają się niedopuszczalnie duże.

Kilka wskazówek:

  • Aby uzyskać lepszy obraz wydajności systemu w chmurze, zautomatyzuj, a następnie powtórz te testy w różnych momentach dnia. Zauważyliśmy, że charakterystyka wydajności może się znacznie różnić w ciągu dnia.
  • Porównując dwóch potencjalnych dostawców DBaaS, upewnij się, że wybierasz komputery klienckie i klaster DBaaS w tej samej lokalizacji geograficznej. Klastry powinny mieć podobną konfigurację. Pamiętaj też, aby przeprowadzać testy o różnych porach dnia.

Co dalej

Oto kilka rzeczy, które zamierzamy zbadać, wykonując więcej pracy w tym obszarze:

  • Uruchamianie obciążeń z wielu komputerów równolegle:podczas próby załadowania klastra MongoDB o dużej pojemności pojedynczy komputer kliencki nie wystarczy. YCSB obecnie nie zapewnia łatwego sposobu równoległego uruchamiania obciążeń z wielu komputerów. Można to jednak zrobić ręcznie. Będzie to również przydatne podczas próby załadowania danych do dużego klastra.
  • Rozmiar zestawu danych:Rozmiar bazy danych w porównaniu z pamięcią systemów MongoDB zmieni bezwzględną charakterystykę przepustowości/opóźnień, biorąc pod uwagę, że w przypadku większych zestawów danych MongoDB będzie musiał trafić na dysk .
  • Rozmiar poszczególnych rekordów:charakterystyka wydajności będzie interesująca, gdy rozmiary rekordów są duże, zwłaszcza gdy są one zbliżone do maksymalnego obsługiwanego rozmiaru rekordu. Może to mieć kluczowe znaczenie dla aplikacji, które wykonują głównie operacje odczytu, modyfikacji i zapisu zwrotnego (takich jak Workload F).
  • Alternatywne sterowniki MongoDB:Ponieważ byliśmy obecnie zainteresowani porównaniem dwóch różnych dostawców DBaaS, nie próbowaliśmy używać wydajniejszych sterowników baz danych. Oczywiście znacznie lepsze liczby bezwzględne można osiągnąć dzięki najnowszym i wydajniejszym sterownikom. Będzie to interesujące dla aplikacji próbujących wydobyć ze swojego systemu ostatnią uncję soku. Ten blog mówi o pomiarach poprawy wydajności za pomocą YCSB przy użyciu asynchronicznego sterownika MongoDB.
  • Alternatywne narzędzia do analizy porównawczej:narzędzie Sysbench dla MongoDB jest dla nas interesujące. Patrzymy na innych.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak sprawić, by testy junitowe wykorzystywały osadzone mongoDB w aplikacji springboot?

  2. Uwierzytelnianie użytkownika w kolbie

  3. Konwertuj DBObject na POJO za pomocą sterownika Java MongoDB

  4. Nie można połączyć się z MongoDB (MongoLabs) przez klienta C#

  5. Zapytania C# mongo z ciągami json