sql >> Databáze >  >> NoSQL >> MongoDB

Jak porovnat MongoDB s YCSB?

Když mluvíme o charakteristikách výkonu systému, většina poskytovatelů DBaaS se omezuje na poskytování informací o hardwaru, na kterém jsou jejich systémy zajišťovány. Je skutečně těžké přesně hovořit o skutečných charakteristikách propustnosti/latence cloudového nasazení vzhledem k počtu proměnných v takovém systému. Virtualizovaná prostředí, nepředvídatelná pracovní zátěž, latence sítě, různé geografické oblasti jsou jen některé z úvah.

Je však dobré dobře rozumět skutečnému výkonu vašeho nasazení MongoDB:abyste mohli poskytovat přesně podle potřeb vaší aplikace; takže můžete skutečně porovnávat různé poskytovatele DBaaS, abyste se ujistili, že dostanete co nejvíce „za peníze“.

Tento blog je úvodem do spuštění některých základních výkonnostních benchmarků ve vašem clusteru MongoDB. Zabývá se podrobnostmi, jak konfigurovat a spouštět srovnávací testy YCSB a interpretovat výsledky. Inspirací pro něj byl nedávný blog MongoDB o vylepšeních výkonu v MongoDB 3.0.

YCSB je populární specifikace Java s otevřeným zdrojovým kódem a sada programů vyvinutá na Yahoo! k porovnání relativního výkonu různých NoSQL databází. Jeho pracovní zátěže se používají v různých srovnávacích studiích databází NoSQL.

Nastavení YCSB

Tato a další části vás provedou krok za krokem procesem nastavení, konfigurace a spuštění testů YCSB na vašem oblíbeném systému poskytovatele DBaaS.

Abyste mohli spustit testy zátěže, budete potřebovat klientský počítač, nejlépe ve stejné geografické poloze jako váš cluster MongoDB, abyste se vyhnuli latenci přes internet. Vyberte konfiguraci, která má slušnou dávku šťávy pro spuštění více vláken, aby se správně načetl váš Mongo cluster. Počítač musí mít nainstalovanou nejnovější verzi Java, Maven a git.

Kroky:

  • Pokud ve vašem systému ještě nejsou nainstalovány Java, Maven nebo git, nainstalujte je. Podívejte se do dokumentace dostupné pro váš konkrétní OS. Ujistěte se, že nainstalujete verzi Maven kompatibilní s vaší verzí Java. Otestujte, zda všechny závislosti fungují správně. Například
$ 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 navrhuje stránka Github YCSB, můžete získat archiv tar YCSB. Ale doporučujeme to postavit ze zdroje. Kroky jsou zdokumentovány v MongoDB README YCSB. Pomůže nám to později povolit ověření MongoDB pro vašeho poskytovatele cloudu.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Poznámka:Pokud váš `mvn clean package` nebo `mvn clean install` příkaz selže kvůli chybám při hledání balíčku „mapkeeper“, odstraňte nebo okomentujte 2 výskyty položek „mapkeeper“  v pom.xml na kořenové úrovni. Další informace naleznete v tomto problému Github.
  • Jakmile bude sestavení úspěšné, jste nyní připraveni spustit testy YCSB!

Povolení ověřování

Většina poskytovatelů MongoDB poskytuje ověřování MongoDB ve výchozím nastavení a neexistuje způsob, jak jej zakázat. Bohužel YCSB v současné době nepodporuje ověřování MongoDB. Samotná implementace klienta používá většinou již zastaralá volání API. Abychom vyhověli našim potřebám, přidali jsme novou vlastnost YCSB specifickou pro MongoDB, 'mongodb.auth' spolu s několika řádky kódu na podporu. Změny jsou velmi jednoduché a rozdíl naleznete zde. Výchozí vlastnosti YCSB specifické pro MongoDB jsou uvedeny zde.

Sestavte balíček znovu pomocí mvn znovu po dokončení změn. Viz část výše o tom, jak vytvořit YCSB pomocí Maven.

Spuštění testů

Tato část wiki YCSB podrobně uvádí další a následné aktivity. Stručně je zde popíšeme spolu s dalšími ukazateli.

  • Dalším krokem je výběr druhu zátěže, kterou chcete spustit. Udělejte si čas na přečtení a pochopení části Core Workloads na YCSB wiki. Jsou shrnuty zde:
    • Úloha A:Velká pracovní zátěž aktualizace:50/50 % mix čtení/zápisu
    • Úloha B:Úloha převážně pro čtení:95/5 % mix čtení/zápisu
    • Úloha C:Pouze pro čtení:100 % čtení
    • Úloha D:Přečtěte si nejnovější pracovní zátěž:Větší provoz na nedávných vložkách
    • Pracovní zátěž E:Krátké rozsahy:Dotazy založené na krátkém rozsahu
    • Pracovní zátěž F:Čtení-upravování-zápis:Čtení, úprava a aktualizace existujících záznamů
  • Je zřejmé, že jednotlivé úlohy lze vyladit pomocí základních vlastností. Možná budete chtít vybrat pracovní zátěž a vyladit vlastnosti tak, aby odpovídaly něčemu, co odpovídá charakteristikám vaší aplikace. (Tato srovnávací studie vybrala spoustu zajímavých „vyladěných“ úloh). Podívejte se také na blog MongoDB, který jsme zmínili v první části. (Náš test zachytí pracovní zátěž A s výchozími poměry čtení/aktualizace).
  • Zvolte počet operací (Vlastnost ‘operationcount’), aby samotný test probíhal po přiměřenou dobu. Testy, které skončí do 30 minut, nemohou být dobrými ukazateli obecného výkonu systému.
  • Vyberte vhodný počet vláken, která má YCSB spustit. To opravdu závisí na tom, jak dobré jsou vaše klientské počítače, jak velké zatížení může váš cluster MongoDB přijmout a jak reprezentativní je pro vaši skutečnou aplikaci. Spustíme naše srovnávací testy na řadě vláken.
  • Spusťte fázi načítání. Vyberte počet záznamů (Vlastnost ‚recordcount‘), které chcete vložit do databáze, a který se blíží počtu operací, které s ní zamýšlíte spustit. Zvolte vhodný počet vláken, aby vkládání netrvalo příliš dlouho. Pro např.
    ./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 příznak ‘ označuje, že se jedná o běh zatížení.
    • s ‘ flag vytiskne stav v 10sekundových intervalech
    • recordcount ‘ je nastaveno na 10 milionů.
    • threads ‘ nastaví počet klientských vláken na 16.
    • mongodb.auth ‘ je vlastnost, kterou jsme napsali, abychom povolili ověřování MongoDB.
  • Nezapomeňte na
    • Přesměrujte stdout do souboru.
    • Použijte „screen ‘ nebo ekvivalentní metodou, aby se vaše relace při provádění těchto operací neztratila
  • Jakmile je fáze načítání dat dokončena, jste připraveni spustit své úlohy. Například
./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
  • Opakujte běhy s různým počtem vláken. Nezapomeňte přesměrovat výsledky, abyste je mohli později porovnat. Pro např. opakovali jsme naše testy pro 2, 4, 8, 16 a 32 vláken.

Analýza výsledků

Poslední část této wiki stránky YCSB pojednává o analýze výsledků. Nejzajímavějšími informacemi jsou celková propustnost a 95/99% procentuální latence. Zvyšování počtu vláken obvykle zvyšuje propustnost až do doby, kdy se zisky vyrovnají a latence se stanou nepřijatelnými. Pro např. zde je graf propustnosti a latence versus počet vláken pro testovací systém, který jsme se snažili porovnat. Vybraná pracovní zátěž byla pracovní zátěž A a přibližně 3 miliony operací.

Z grafu lze usoudit, že 16 vláken je pravděpodobně „sladkým místem“ z hlediska zatížení tohoto serveru MongoDB:za ním je čára propustnosti plochá i při exponenciálním nárůstu počtu vláken, zatímco latence rostou do nepřijatelně velkých rozměrů.

Několik tipů:

  • Pro lepší představu o výkonu systému v cloudu automatizujte a poté opakujte tyto testy jsou různé body dne. Všimli jsme si, že výkonnostní charakteristiky se mohou během dne výrazně lišit.
  • Při porovnávání dvou potenciálních poskytovatelů DBaaS se ujistěte, že jste vybrali klientské počítače a cluster DBaaS ve stejné geografické oblasti. Clustery by měly mít podobnou konfiguraci. Nezapomeňte také spustit testy v různou denní dobu.

Co bude dál

Zde je několik věcí, které hodláme prozkoumat, protože v této oblasti děláme více:

  • Souběžné spouštění úloh z více počítačů:Při pokusu o načtení vysokokapacitního clusteru MongoDB nebude stačit jediný klientský počítač. YCSB v současné době neposkytuje snadný způsob paralelního spouštění úloh z více strojů. Lze to však provést ručně. To bude také užitečné při pokusu o načtení dat do velkého clusteru.
  • Velikost datové sady:Velikost databáze versus paměť systémů MongoDB změní charakteristiky absolutní propustnosti/latence vzhledem k tomu, že u větších datových sad bude muset MongoDB zasáhnout disk .
  • Velikost jednotlivých záznamů:Výkonnostní charakteristiky budou zajímavé, když jsou záznamy velké, zvláště když se blíží maximální podporované velikosti záznamu. To může být zásadní pro aplikace, které většinou provádějí operace čtení-úpravy-zápis zpět (jako Workload F).
  • Alternativní ovladače MongoDB:Vzhledem k tomu, že nás aktuálně zajímalo srovnání dvou různých poskytovatelů DBaaS, nepokoušeli jsme se použít efektivnější ovladače databáze. S nejnovějšími a efektivnějšími ovladači lze samozřejmě dosáhnout mnohem lepších absolutních čísel. To bude zajímavé pro aplikace, které se snaží ze svého systému vytáhnout poslední unci šťávy. Tento blog pojednává o měřeních zlepšení výkonu prostřednictvím YCSB pomocí asynchronního ovladače MongoDB.
  • Alternativní nástroje pro srovnávání:Sysbench pro MongoDB je pro nás zajímavý. Díváme se na ostatní.


  1. může více klientů přistupovat ke stejnému seznamu současně, aniž by byli blokováni v Redis?

  2. Dotaz $pull vnořeného pole pomocí ovladače C# MongoDB

  3. MongoDB $radiansToDegrees

  4. Plánování celerových úkolů s velkým ETA