Сравнение производительности MongoDB vs Apache Cassandra

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:28, 2 июня 2018.

NoSQL базы данных стремительно становятся стандартной платформой данных для приложений, которые используют телекоммуникационные или интернет устройства (т. е. на основе браузера, с сенсорным управлением или мобильные) в качестве передней конец. Хотя на рынке существует множество баз данных NoSQL, различные отраслевые тенденции говорят о том, что лидирующими на сегодняшний день являются MongoDB, Apache Cassandra и HBase. Когда дело доходит до производительности, следует отметить, что на сегодняшний день понятие «победитель забирает все» не распростаняется среди трех лучших баз данных NoSQL или любого другого механизма NoSQL. В зависимости от использования и условий развертывания, почти всегда может быть такое, что одна база данных NoSQL превзошла другую, но все же отстает от своего конкурента, когда изменяются правила взаимодействия. Хотя всегда рекомендуется, чтобы кто-либо оценивал производительность базы данных (NoSQL или других) для каждого конкретного варианта использования и условия развертывания. В этой статье будет сравнение производительности Apache Cassandra и MongoDB.


MongoDB

MongoDB: кросс-платформенная, документно-ориентированная база данных. Из особенностей можно отметить простой язык запросов, хорошая документация, огромное сообщество и т.д

Кто использует: Google, UPS, Facebook, Cisco, eBay, BOSH, Adobe, SAP, Forbes и множество других компаний.

Apache Cassandra

Apache Cassandra хорошо масштабируемая, высокоэффективная распределенная база данных, разработанная, для обращения с большими объемами данных через множество товарных серверов, обеспечивая высокую доступность. Apache Cassandra полностью реализует принципы A (доступность) и P (устойчивость к разделению - простота масштабирования)

Кто использует: AppScale, Constant Contact, Digg, Facebook, IBM, Instagram, Spotify, Netflix и Reddit.[Источник 1]

Основные характеристики баз данных

Сравнение Apache Cassandra и MongoDB [Источник 2]
Параметры Apache Cassandra MongoDB
Краткое описание Колонко-ориетированное хранение, основанное на идеях BigTable и DynamoDB Одно из наиболее популярных документных хранилищ
Основная модель хранения данных Колонко-ориетированная Документно-ориентированная
Дополнительная модель хранения данных - База данных типа Key/Value
Вебсайт cassandra.apache.org www.mongodb.com
Документация cassandra.apache.org/­doc/­latest docs.mongodb.com/­manual
Разработчик Apache Software Foundation MongoDB, Inc
Дата релиза 2008 2009
Текущая версия 3.11.2, Февраль 2018 3.6.4, April 2018
Лицензия Открытое программное обеспечение Открытое программное обеспечение
Облачное Нет Нет
Язык реализации Java С++
Поддерживаемые операционные системы сервера BSD, Linux, OS X, Windows Linux, OS X, Solaris, Windows
Схема данных schema-free schema-free
Типизация Да Да
Поддержка XML Нет Да
Поддержка вторичных индексов Ограничено Да
SQL SQL - подобные DML и DDL выражения Нет
API и другие методы доступа Проприетарный протокол Thrift Проприетарный протокол с использованием JSON
Поддерживаемые языки программирования C#, С++, Clojure, Erlang, Go, Haskell, Java, JavaScript, Lisp, Perl, PHP, Python, Ruby, Scala Actionscript, C, C#, С++, Clojure, ColdFusion, D, Dart, Delphi, Erlang, Go, Groovy, Haskell, Java, JavaScript, Lisp, Lua, MatLab, Perl, PHP, PowerShell, Prolog, Python, R , Ruby, Scala, Smalltalk
Язык написания скриптов на стороне сервера Нет JavaScript
Триггеры Да Нет
Методы разбиения Sharding Sharding
Методы репликаций Выбираемый фактор репликации Master-slave репликации
MapReduce Да Да
Концепции согласования Согласование по событию; Немедленное согласование Согласование по событию; Немедленное согласование
Параллелизм Да Да
Возможность хранения только в памяти Нет Да
Контроль доступа пользователей Права доступа для пользователей могут быть установлены для каждого объекта Назначение прав для отдельных пользователей и ролей

Критерии сравнения

Производительность: скорость чтения, записи. Также нельзя забывать про такие факторы, как простота в настройке и использовании.

ПО, автоматизирующее сравнение

Yahoo! Cloud Serviceing Benchmark (YCSB) - это спецификация и программный пакет с открытым исходным кодом для оценки возможностей поиска и обслуживания компьютерных программ. Он часто используется для сравнения относительной производительности систем управления базами данных NoSQL.

Исходный ориентир был разработан работниками исследовательского отдела Yahoo! который выпустил его в 2010 году с заявленной целью «облегчить сравнение производительности систем генерации облачных данных нового поколения», особенно для рабочих нагрузок обработки транзакций, которые отличались от тех, которые измерялись с помощью тестов, разработанных для более традиционных систем управления базами данных.[Источник 3]

Установка YCSB

Первый способ:

curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.13.0/ycsb-0.13.0.tar.gz
tar xfvz ycsb-0.13.0.tar.gz
cd ycsb-0.13.0

Второй способ:

Для начала установим mvn:

wget http://ftp.heanet.ie/mirrors/www.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
sudo tar xzf apache-maven-*-bin.tar.gz -C /usr/local
cd /usr/local
sudo ln -s apache-maven-* maven
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:${PATH}

Затем установка самого YCSB:

git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package

Тестирование MongoDB

После установки необходимо выполнить следующие команды Загрузка данных:

./bin/ycsb load mongodb -s -P workloads/workloada > outputLoad.txt

Запуск рабочей нагрузки:

./bin/ycsb run mongodb -s -P workloads/workloada > outputRun.txt

Тестирование Apache Cassandra

Загрузка тестовых данных:

./bin/ycsb load cassandra-10 -p hosts="192.168.122.89" -P workloads/workloada -s > workloada_load_res.txt

Запуск тестирования:

./bin/ycsb run cassandra-10 -threads 10 -p hosts="192.168.122.89" -P workloads/workloada -s  > workloada_run_res.txt

Результаты будут доступны в файле workloada_run_res.txt:

$ head workloada_res.txtYCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.CassandraClient10 -p hosts=192.168.122.89 -P workloads/workloadc -s -threads 10 -target 100 -t
[OVERALL], RunTime(ms), 10139.0
[OVERALL], Throughput(ops/sec), 98.62905611993293
[READ], Operations, 1000
[READ], AverageLatency(us), 1003.36
[READ], MinLatency(us), 412
[READ], MaxLatency(us), 25990
[READ], 95thPercentileLatency(ms), 1
[READ], 99thPercentileLatency(ms), 3

Также при работе возможна ошибка:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Для её исправления необходимо в файле pow.xml добавить следующие строки:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

Нагрузки

Можно выбрать количество записей (свойство 'recordcount') для вставки в базу данных, которая близка к количеству операций (operationcount), которые нужно запустить на ней. Также, с помощью параметра (-threads) подходящее количество потоков, чтобы вставка не занимала слишком много времени. YCSB имеет предустановленные настройки для нагрузки:

  • Workload A: Update heavy workload

Эта нагрузка состоит из чтения и записи в соотношении 50/50. Пример применения - это хранилище сеансов, в котором записываются последние действия.

Параметр: workloads/workloada

  • Workload B: Read mostly workload

Эта нагрузка состоит из чтения и записи в соотношении 95/5.

Пример применения - маркировка фотографий. Добавить тег - это обновление, но большинство операций - чтение тегов.

Параметр: workloads/workloadb

  • Workload C: Read only

Эта нагрузка состоит полностью из чтения.

Пример применения - кеш профиля пользователя, где профили создаются в другом месте

Параметр: workloads/workloadc

  • Workload D: Read latest workload

В этой нагрузке добавляются новые записи, и самые свежие записи являются наиболее популярными.

Пример применения - обновление статуса пользователя.

Параметр: workloads/workloadd

  • Workload E: Short ranges

В этой нагрузке производятся короткие диапазоны записей.

Пример использования - многопоточные разговоры, где каждое сканирование предназначено для сообщений в заданном потоке

Параметр: workloads/workloade

  • Workload F: Read-modify-write

В этой нагрузке будет производиться запись, модификация записи и сохранение изменений.

Пример использования - пользовательская база данных, где пользовательские записи считываются и изменяются пользователем или записывают активность пользователя.

Параметр: workloads/workloadf [Источник 4]

Результаты тестирования

Чтение
Запись

Демонстрация работы

Установка баз данных

Подробный процесс установки этих баз данных можно увидеть в соответствующих статьях:

Заключение

Cassandra — единственная БД, у которой запись происходит быстрее, чем чтение. Это происходит из-за того, что запись в ней успешно завершается (в самом быстром варианте) сразу после записи в журнал (на диске). А вот чтение требует проверок, нескольких чтений с диска, выбора самой свежей записи. Cassandra — это надежный и довольно быстрый масштабируемый архив данных.

У MongoDB запись происходит медленно, но относительно быстра на чтение. Если данные (а точнее, то, что называют working set — набор актуальных данных, к которым постоянно идет обращение) не помещаются в память, она сильно замедляется (а это именно то, что происходит при тестировании YCSB). Также нужно помнить, что у MongoDB существует глобальная блокировка на чтение/запись, что может доставить проблем при очень высокой нагрузке. В целом же MongoDB — хорошая БД для веба.

Источники

  1. Cassandra vs MongoDB in 2018 // blog.panoply.io/. https://blog.panoply.io/cassandra-vs-mongodb (дата обращения: 01.06.2018).
  2. System Properties Comparison Cassandra vs. MongoDB // DB-engines.com. https://db-engines.com/en/system/Cassandra%3BMongoDB (дата обращения: 29.05.2018).
  3. YCSB // wikipedia.org/. https://en.wikipedia.org/wiki/YCSB (дата обращения: 01.06.2018).
  4. Core Workloads // github.com/. https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads (дата обращения: 02.06.2018)