sql >> Database >  >> NoSQL >> MongoDB

Hoe MongoDB te benchmarken met YCSB?

Terwijl we het hebben over de prestatiekenmerken van het systeem, beperken de meeste DBaaS-providers zich tot het verstrekken van informatie over de hardware waarop hun systemen zijn ingericht. Het is inderdaad moeilijk om nauwkeurig te praten over de werkelijke doorvoer-/latentiekenmerken van een cloudgebaseerde implementatie, gezien het aantal variabelen in een dergelijk systeem. Gevirtualiseerde omgevingen, onvoorspelbare workloads, netwerklatenties, verschillende geografische gebieden zijn slechts enkele van de overwegingen.

Het is echter een goed idee om een ​​goed begrip te hebben van de werkelijke prestaties van uw MongoDB-implementatie:zodat u nauwkeurig kunt inrichten op basis van uw toepassingsbehoeften; zodat u verschillende DBaaS-providers kunt vergelijken om ervoor te zorgen dat u het meeste "waar voor uw geld" krijgt.

Deze blog is een inleiding over het uitvoeren van enkele basisprestatiebenchmarks op uw MongoDB-cluster. Het gaat in op de details van het configureren en uitvoeren van YCSB-benchmarktests en het interpreteren van de resultaten. De inspiratie hiervoor kwam van de recente MongoDB-blog over prestatieverbeteringen in MongoDB 3.0.

YCSB is een populaire open-source specificatie en programmasuite voor Java, ontwikkeld door Yahoo! om de relatieve prestaties van verschillende NoSQL-databases te vergelijken. De workloads worden gebruikt in verschillende vergelijkende onderzoeken van NoSQL-databases.

YCSB instellen

Deze en latere secties leiden u stapsgewijs door het proces voor het instellen, configureren en uitvoeren van YCSB-tests op uw favoriete DBaaS-providersysteem.

Om workloadtests uit te voeren, hebt u een clientcomputer nodig, bij voorkeur op dezelfde geografische locatie als uw MongoDB-cluster om latenties via internet te vermijden. Selecteer een configuratie met een behoorlijke hoeveelheid sap om meerdere threads uit te voeren om uw Mongo-cluster op de juiste manier te laden. De machine moet een recente versie van Java, Maven en git hebben geïnstalleerd.

Stappen:

  • Als Java, Maven of git nog niet op je systeem is geïnstalleerd, installeer ze dan. Raadpleeg de documentatie die beschikbaar is voor uw specifieke besturingssysteem. Zorg ervoor dat u een Maven-versie installeert die compatibel is met uw Java-versie. Test of alle afhankelijkheden correct werken. Voor bijv.
$ 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)
  • Zoals gesuggereerd door de Github-pagina van YCSB zou je het tar-archief van YCSB kunnen krijgen. Maar we raden aan om het vanaf de bron te bouwen. Stappen zijn gedocumenteerd in de MongoDB README van YCSB. Dit zal ons helpen om later MongoDB-authenticatie voor uw cloudprovider in te schakelen.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Opmerking:als uw `mvn clean package` of `mvn clean install` opdracht mislukt vanwege fouten bij het lokaliseren van het pakket 'mapkeeper', verwijder of becommentarieer de twee instanties van de 'mapkeeper'-items in de pom.xml op wortelniveau. Bekijk deze Github-uitgave voor meer informatie.
  • Zodra de build is gelukt, ben je nu klaar om YCSB-tests uit te voeren!

Verificatie inschakelen

De meeste MongoDB-providers bieden standaard MongoDB-authenticatie en er is geen manier om dit uit te schakelen. Helaas ondersteunt YCSB momenteel geen MongoDB-authenticatie. De clientimplementatie zelf gebruikt voornamelijk, nu verouderde API-aanroepen. Om aan onze behoeften te voldoen, hebben we een nieuwe MongoDB-specifieke YCSB-eigenschap toegevoegd, 'mongodb.auth' samen met een paar regels code om het te ondersteunen. De wijzigingen zijn heel eenvoudig en een diff is hier te vinden. Standaard MongoDB-specifieke YCSB-eigenschappen worden hier vermeld.

Bouw het pakket opnieuw op met mvn nogmaals zodra de wijzigingen zijn voltooid. Raadpleeg het bovenstaande gedeelte over het bouwen van YCSB met Maven.

De tests uitvoeren

Dit gedeelte van de YCSB-wiki geeft een gedetailleerde lijst van volgende en volgende activiteiten. We zullen ze hier kort beschrijven, samen met andere aanwijzingen.

  • De volgende stap is het kiezen van het soort werklast dat u wilt uitvoeren. Neem de tijd om de sectie Core Workloads van de YCSB-wiki te lezen en te begrijpen. Ze worden hier samengevat:
    • Werklast A:zware werklast bijwerken:50/50% mix van lezen/schrijven
    • Werkbelasting B:werkbelasting voornamelijk lezen:95/5% mix van lezen/schrijven
    • Werkbelasting C:Alleen-lezen:100% leest
    • Werklast D:Lees de laatste werklast:Meer verkeer op recente invoegingen
    • Werklast E:korte afstanden:op korte afstand gebaseerde zoekopdrachten
    • Werklast F:Lezen-wijzigen-schrijven:bestaande records lezen, wijzigen en bijwerken
  • Uiteraard kunnen de afzonderlijke workloads worden aangepast met Core Properties. Misschien wilt u een werkbelasting kiezen en de eigenschappen aanpassen aan iets dat overeenkomt met de kenmerken van uw toepassing. (Deze vergelijkende studie koos een aantal interessante "geknepen" workloads). Raadpleeg ook de MongoDB-blog die we in de eerste sectie noemden. (Onze test pikt Workload A op met standaard lees-/updateratio's).
  • Kies het aantal bewerkingen (eigenschap 'operationcount') zodat de test zelf gedurende een geschikte tijd wordt uitgevoerd. Tests die binnen 30 minuten klaar zijn, kunnen geen goede indicatoren zijn voor de algemene prestatie van het systeem.
  • Kies het juiste aantal threads dat YCSB moet draaien. Dit hangt echt af van hoe goed uw clientmachines zijn, hoeveel belasting uw MongoDB-cluster kan hebben en hoe representatief deze is voor uw daadwerkelijke toepassing. We zullen onze benchmarktests uitvoeren op een reeks threads.
  • Voer de laadfase uit. Kies een recordtelling (eigenschap 'recordcount') om in de database in te voegen die dicht bij het aantal bewerkingen ligt dat u erop wilt uitvoeren. Kies een geschikt aantal draden zodat het inbrengen niet te lang duurt. Voor bijvoorbeeld
    ./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 ' vlag geeft aan dat dit een laadrun is.
    • s ' vlag drukt de status af met intervallen van 10 seconden
    • recordcount ' is ingesteld op 10 miljoen.
    • threads ' stelt het aantal clientthreads in op 16.
    • mongodb.auth ' is de eigenschap die we hebben geschreven om MongoDB-authenticatie in te schakelen.
  • Vergeet niet om
    • Redirect de stdout naar een bestand.
    • Gebruik 'screen ' of een gelijkwaardige methode zodat uw sessie niet verloren gaat tijdens het uitvoeren van deze bewerkingen
  • Zodra de fase van het laden van gegevens is voltooid, bent u klaar om uw workloads uit te voeren. Voor bijv.
./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
  • Herhaal de runs met verschillende aantallen threads. Vergeet niet om de resultaten om te leiden, zodat u ze later kunt vergelijken. Voor bijv. we hebben onze tests herhaald voor 2, 4, 8, 16 en 32 threads.

Resultaten analyseren

Het laatste deel van deze YCSB-wikipagina gaat over het analyseren van resultaten. De meest interessante stukjes informatie zijn de totale doorvoer en 95/99% procentuele latenties. Gewoonlijk verhoogt het verhogen van het aantal threads de doorvoer tot het moment waarop de winsten afvlakken en de latenties onaanvaardbaar worden. Voor bijv. hier is een plot van doorvoer en latentie versus # threads voor een testsysteem dat we probeerden te benchmarken. De geselecteerde werklast was werklast A en ongeveer 3 miljoen bewerkingen.

Uit de grafiek kan worden geconcludeerd dat 16 threads waarschijnlijk de "sweet spot" is vanuit een belastingsstandpunt voor deze MongoDB-server:daarbuiten is de doorvoerlijn vlak, zelfs voor een exponentiële groei van # threads, terwijl latenties onaanvaardbaar groot worden.

Een paar tips:

  • Voor een beter beeld van de systeemprestaties via de cloud, zijn het automatiseren en herhalen van deze tests verschillende momenten van de dag. We hebben gemerkt dat prestatiekenmerken in de loop van de dag aanzienlijk kunnen variëren.
  • Als u twee potentiële DBaaS-providers vergelijkt, zorg er dan voor dat u uw clientcomputers en het DBaaS-cluster in dezelfde geografie selecteert. De clusters moeten een vergelijkbare configuratie hebben. Vergeet ook niet om de tests op verschillende tijdstippen van de dag uit te voeren.

Wat is het volgende

Hier zijn een paar dingen die we van plan zijn te onderzoeken naarmate we meer werk op dit gebied doen:

  • Werklasten van meerdere machines parallel uitvoeren:wanneer u probeert een MongoDB-cluster met hoge capaciteit te laden, is een enkele clientcomputer niet voldoende. YCSB biedt momenteel geen gemakkelijke manier om workloads van meerdere machines parallel uit te voeren. Het kan echter handmatig worden gedaan. Dit is ook handig wanneer u probeert gegevens in een groot cluster te laden.
  • Grootte van de dataset:de grootte van de database versus het geheugen van de MongoDB-systemen zal de absolute doorvoer-/latentiekenmerken veranderen, aangezien MongoDB voor grotere datasets de schijf moet raken .
  • Grootte van afzonderlijke records:het is interessant voor de prestatiekenmerken wanneer recordgroottes groot zijn, vooral wanneer deze dicht bij de maximaal ondersteunde recordgrootte ligt. Dit kan van cruciaal belang zijn voor toepassingen die voornamelijk lezen-wijzigen-terugschrijven-bewerkingen uitvoeren (zoals Workload F).
  • Alternatieve MongoDB-stuurprogramma's:aangezien we op dit moment geïnteresseerd waren in het vergelijken van twee verschillende DBaaS-providers, hebben we niet geprobeerd efficiëntere databasestuurprogramma's te gebruiken. Het is duidelijk dat met de nieuwste en efficiëntere stuurprogramma's veel betere absolute cijfers kunnen worden behaald. Dit zal interessant zijn voor toepassingen die proberen het laatste greintje sap uit hun systeem te halen. Deze blog gaat over prestatieverbeteringsmetingen via YCSB met behulp van een asynchrone MongoDB-driver.
  • Alternatieve benchmarkingtools:Sysbench voor MongoDB is er een die we interessant vinden. We kijken naar anderen.


  1. Tips voor het beheren van uw databaseconfiguraties

  2. Krijg alle sleutels in de Redis-database met python

  3. ElastiCache Redis instellen met Elastic BeanStalk + Django

  4. Fix "$pullAll vereist een array-argument maar kreeg een dubbele" in MongoDB