MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да сравним MongoDB с YCSB?

Докато говорим за характеристиките на производителността на системата, повечето доставчици на DBaaS се ограничават до предоставяне на информация за хардуера, на който са осигурени техните системи. Наистина е трудно да се говори точно за действителните характеристики на пропускателна способност/закъснение на облачно базирано внедряване, като се има предвид броят на променливите в такава система. Виртуализирани среди, непредвидими натоварвания, мрежови латентности, различни географски райони са само част от съображенията.

Въпреки това е добра идея да имате справедливо разбиране за действителната производителност на внедряването на MongoDB:така че да можете да предоставяте точно въз основа на нуждите на приложението си; така че да можете действително да сравнявате различни доставчици на DBaaS, за да сте сигурни, че получавате най-добрия резултат.

Този блог е пример за провеждане на някои основни показатели за ефективност на вашия MongoDB клъстер. Той разглежда подробностите за това как да конфигурирате и стартирате тестове за сравнение на YCSB и интерпретирате резултатите. Вдъхновението за него дойде от скорошния блог на MongoDB за подобрения в производителността в MongoDB 3.0.

YCSB е популярна спецификация и програмен пакет с отворен код на Java, разработен в Yahoo! за сравняване на относителната производителност на различни NoSQL бази данни. Работните му натоварвания се използват в различни сравнителни изследвания на NoSQL бази данни.

Настройване на YCSB

Този и следващите раздели ще ви преведат през стъпка по стъпка процес за настройка, конфигуриране и стартиране на YCSB тестове на вашата любима система на доставчик на DBaaS.

За да стартирате тестове за натоварване, ще ви е необходима клиентска машина, за предпочитане на същото географско местоположение като вашия MongoDB клъстер, за да избегнете латентностите в интернет. Изберете конфигурация, която има прилично количество сок, за да стартирате множество нишки, за да заредите по подходящ начин вашия Mongo клъстер. Машината трябва да има инсталирана последна версия на Java, Maven и git.

Стъпки:

  • Ако Java, Maven или git още не са инсталирани във вашата система, инсталирайте ги. Вижте наличната документация за вашата конкретна ОС. Уверете се, че инсталирате версия на Maven, съвместима с вашата Java версия. Проверете дали всички зависимости работят правилно. За напр.
$ 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)
  • Както е предложено от страницата на Github на YCSB, можете да получите tar архива на YCSB. Но ние препоръчваме да го изградите от източник. Стъпките са документирани в MongoDB README на YCSB. Това ще ни помогне по-късно да активираме удостоверяването на MongoDB за вашия доставчик на облак.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Забележка:Ако вашият `mvn clean package` или `mvn clean install` командата не успее поради грешки при намирането на пакета „mapkeeper“, изтрийте или коментирайте 2-те екземпляра на „mapkeeper“  записите в pom.xml на ниво корен. Вижте този проблем на Github за повече информация.
  • След като компилацията е успешна, вече сте готови да стартирате YCSB тестове!

Активиране на удостоверяване

Повечето доставчици на MongoDB предоставят MongoDB удостоверяване по подразбиране и няма начин да го деактивирате. За съжаление, YCSB в момента не поддържа удостоверяване на MongoDB. Самата клиентска реализация използва предимно, сега, оттеглени API извиквания. За да отговорим на нашите нужди, добавихме ново свойство YCSB, специфично за MongoDB, 'mongodb.auth' заедно с няколко реда код за поддръжка. Промените са много прости и разликата може да се намери тук. Специфичните за MongoDB YCSB свойства са изброени тук.

Създайте пакета отново с помощта на mvn отново, след като промените приключат. Вижте раздела по-горе за това как да изградите YCSB с помощта на Maven.

Изпълнение на тестовете

Този раздел от уикито на YCSB изброява в подробности следващите и следващите дейности. Тук ще ги опишем накратко заедно с други насоки.

  • Следващата стъпка е да изберете вида на натоварването, което искате да изпълнявате. Отделете време, за да прочетете и разберете раздела Основни работни натоварвания в уикито на YCSB. Те са обобщени тук:
    • Работно натоварване A:Актуализиране на тежко работно натоварване:50/50% микс от четене/записване
    • Работно натоварване Б:Работно натоварване предимно четене:95/5% смес от четене/записване
    • Работно натоварване C:Само за четене:100% четене
    • Работно натоварване D:Прочетете най-новото работно натоварване:Повече трафик при скорошни вмъквания
    • Работно натоварване E:Кратки обхвати:Заявки, базирани на кратък обхват
    • Работно натоварване F:Четене-промяна-запис:Четене, модифициране и актуализиране на съществуващи записи
  • Очевидно е, че отделните натоварвания могат да бъдат настроени с помощта на основни свойства. Може да искате да изберете работно натоварване и да настроите свойствата, за да съответстват на нещо, което съответства на характеристиките на вашето приложение. (Това сравнително проучване избра куп интересни „променени“ работни натоварвания). Също така вижте блога на MongoDB, който споменахме в първия раздел. (Нашият тест ще вземе работно натоварване А със съотношения четене/актуализация по подразбиране).
  • Изберете броя на операцията (свойство „operationcount“), така че самият тест да се изпълнява за подходящ период от време. Тестовете, които завършват в рамките на 30 минути, не могат да бъдат добри показатели за общата производителност на системата.
  • Изберете подходящия брой нишки, които YCSB трябва да изпълнява. Това наистина зависи от това колко добри са вашите клиентски машини, колко натоварване може да поеме вашият MongoDB клъстер и колко представителен е той за действителното ви приложение. Ще проведем нашите сравнителни тестове срещу редица нишки.
  • Изпълнете фазата на зареждане. Изберете брой записи (свойство „recordcount“), който да вмъкнете в базата данни, който е близо до броя на операциите, които възнамерявате да изпълните върху нея. Изберете подходящ брой нишки, така че вмъкването да не отнеме твърде дълго. За напр.
    ./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 ’ флагът показва, че това е изпълнение на зареждане.
    • s „ флагът отпечатва състоянието на интервали от 10 секунди
    • recordcount “ е зададен на 10 милиона.
    • threads ‘ задава броя на клиентските нишки на 16.
    • mongodb.auth ‘ е свойството, което написахме, за да активираме удостоверяването на MongoDB.
  • Не забравяйте да
    • Пренасочване на stdout към файл.
    • Използвайте „screen ‘ или еквивалентен метод, така че вашата сесия да не бъде загубена, докато изпълнявате тези операции
  • След като фазата на зареждане на данни приключи, сте готови да стартирате работните си натоварвания. За напр.
./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
  • Повторете сериите с различен брой нишки. Не забравяйте да пренасочите резултатите, за да можете да ги сравните по-късно. За напр. повторихме нашите тестове за 2, 4, 8, 16 и 32 нишки.

Анализиране на резултатите

Последният раздел на тази уики страница на YCSB говори за анализиране на резултатите. Най-интересните части от информация са общата пропускателна способност и 95/99% процентни закъснения. Обикновено увеличаването на броя на нишките увеличава пропускателната способност до този момент, когато печалбите се изравняват и латентностите станат неприемливи. За напр. ето графика на производителност и латентност спрямо # нишки за тестова система, която се опитвахме да сравним. Избраното работно натоварване беше Работно натоварване А и около 3 милиона операции.

От графиката може да се заключи, че 16 нишки вероятно са „сладкото място“ от гледна точка на натоварването за този MongoDB сървър:Отвъд него линията на пропускателна способност е плоска дори при експоненциално нарастване на # нишки, докато латентностите нарастват, за да станат неприемливо големи.

Няколко насоки:

  • За по-добра картина на производителността на системата в облака, автоматизирайте и след това повторете тези тестове са различни точки от деня. Забелязахме, че работните характеристики могат да варират значително през деня.
  • Когато сравнявате два потенциални доставчици на DBaaS, уверете се, че сте избрали клиентските си машини и DBaaS клъстера в една и съща география. Клъстерите трябва да са с подобна конфигурация. Също така, не забравяйте да стартирате тестовете по различни часове на деня.

Какво следва

Ето няколко неща, които възнамеряваме да проучим, докато вършим повече работа в тази област:

  • Изпълнение на работни натоварвания от множество машини паралелно:Когато се опитвате да заредите клъстер MongoDB с голям капацитет, една клиентска машина няма да е достатъчна. Понастоящем YCSB не предоставя лесен начин за паралелно изпълнение на работни натоварвания от множество машини. Въпреки това, може да се направи ръчно. Това също ще бъде полезно, когато се опитвате да заредите данни в голям клъстер.
  • Размер на набора от данни:Размерът на базата данни спрямо паметта на системите MongoDB ще промени характеристиките на абсолютната пропускателна способност/закъснения, като се има предвид, че за по-големи набори от данни MongoDB ще трябва да удари диска .
  • Размер на отделните записи:Ще бъде интересно за характеристиките на производителността, когато размерите на записа са големи, особено когато е близо до максималния поддържан размер на записа. Това може да е от решаващо значение за приложения, които извършват предимно операции четене-промяна-запис (като Workload F).
  • Алтернативни драйвери на MongoDB:Тъй като в момента се интересувахме от сравняване на два различни доставчици на DBaaS, не се опитахме да използваме по-ефективни драйвери за бази данни. Очевидно е, че с най-новите и по-ефективни драйвери могат да се постигнат много по-добри абсолютни числа. Това ще бъде интересно за приложения, които се опитват да извлекат последната унция сок от своята система. Този блог говори за измервания за подобряване на производителността чрез YCSB чрез използване на асинхронен драйвер MongoDB.
  • Алтернативни инструменти за сравнителен анализ:Sysbench за MongoDB е този, който намираме за интересен. Гледаме други.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pymongo.errors.CursorNotFound:идентификаторът на курсора '...' не е валиден на сървъра

  2. Удостоверяване на потребителя на флакона

  3. Как да използвам библиотеки на трети страни в glassfish?

  4. render_template с множество променливи

  5. MongoDB – Индексът не се използва при сортиране и ограничаване на заявка с обхват