MongoDB MMAPv1 против хранилищ WiredTiger

25

В mongoDB3 появился новый движок хранения: WiredTiger . Тем не менее, MMAPv1 по-прежнему является выбором по умолчанию в Mongo .

Один может быть не лучше другого, это часто зависит от варианта использования и выбора правильного инструмента для работы. Но какой двигатель подходит для какой работы?

Фактически, хотя MMAPv1 является механизмом по умолчанию, WiredTiger выглядит лучше почти во всех областях. Он имеет те же функции, что и MMAPv1 plus:

  • лучше написать производительность,
  • параллелизм на уровне документа,
  • сжатия,
  • система моментальных снимков и контрольных точек.

Я нашел сравнительную таблицу в блоге MongoDB :

Сравнение WiredTiger и MMAPv1

Итак, кроме случаев, когда вы используете Solaris, есть ли причина не выбирать WiredTiger?


РЕДАКТИРОВАТЬ

Вот два видео, которые подробно объясняют внутренности WiredTiger и MMAPv1 .

Buzut
источник
Все люди здесь ... вы можете посетить blog.clevertap.com/…, чтобы получить очень хорошее объяснение на эту тему
великолепный

Ответы:

26

Лично я предпочитаю механизм хранения mmapv1 на данный момент по трем причинам.

Причина 1: зрелость

Не то чтобы WiredTiger был незрелым. Но mmapv1 хорошо изучен и проверен в бою все время вверх и вниз, вперед и назад, выше и дальше. У WiredTiger возникли серьезные проблемы ( подробности см. На http://jira.mongodb.com) относительно недавно, и я не хочу, чтобы мои клиенты нашли следующий трудный путь.

Причина 2: Особенности

Учитывая, что WT имеет некоторые принципиально отличные функции. Дело в том, что я не видел, чтобы кто-то извлекал выгоду из них. Сжатие? В любом случае, вы жертвуете довольно трудно, чтобы достичь производительности ради довольно дешевого дискового пространства. Отсутствие проблемы миграции документов для расширения документов? Что ж, у нас все еще есть ограничение в размере 16 МБ и дополнительная сложность для встраиваемых документов, особенно когда встраивание излишне.

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

Причина 3: Общая стоимость владения

Для новых проектов может подойти WT, особенно начиная с версии 3.2, поскольку следующее не применяется.

Выполнение миграции данных стоит дорого, Это должно быть запланировано, план должен быть согласован всеми заинтересованными сторонами, должны быть разработаны и согласованы планы действий в чрезвычайных ситуациях, миграция должна быть подготовлена, выполнена и рассмотрена. Теперь умножьте время, необходимое для заинтересованных сторон, участвующих в этом процессе, и затраты на ускорение миграции данных. Возврат инвестиций с другой стороны кажется довольно небольшим. Вы можете немного масштабировать вместо миграции, если учесть эти факторы. Чтобы создать у вас впечатление: я бы оценил примерно одну «рабочую неделю» на каждого участника, если миграция запланирована, выполнена и проверена должным образом. С затратами в 100 долларов в час на человека и привлечением только трех человек (менеджер, администратор баз данных и разработчик), что составляет 12000 долларов. Обратите внимание, что это консервативная оценка.

Вывод

Все вышеперечисленные факторы привели меня к выводу, что вообще не следует использовать WT. Сейчас.


Обновить

Этому посту уже несколько месяцев, поэтому он заслуживает обновления

По срокам погашения

Мои оригинальные комментарии о сроке погашения являются устаревшими. WiredTiger уже давно не сталкивался с какими-либо серьезными проблемами и стал стандартным механизмом хранения по умолчанию в MongoDB 3.2.

На особенности

Мои оригинальные комментарии все еще имеют смысл, imho.

компрессия

Однако, когда бюджет ограничен или, вообще говоря, производительность не является главной проблемой, компромисс производительности довольно мал, и вы в основном обмениваете небольшое влияние на производительность (по сравнению с несжатым WT) на дисковое пространство, используя то, что в противном случае было бы просто вокруг: процессор.

шифрование

В MongoDB 3.2 Enterprise появилась возможность шифрования хранилищ WiredTiger. Для данных с повышенными требованиями безопасности это убойная функция и делает WT единственным механизмом хранения, как с технической точки зрения (MMAPv1 не поддерживает шифрование), так и концептуально. Конечно, если оставить в стороне возможность зашифрованных разделов диска, хотя в некоторых средах такой возможности может не быть.

Блокировка уровня документа

Я должен признать, что я в основном пропустил эту особенность WT в моем вышеупомянутом анализе, главным образом потому, что он не относился ко мне или моим клиентам, когда я писал оригинальный ответ.

В зависимости от настроек, в основном, когда у вас много одновременно работающих клиентов записи, эта функция может значительно повысить производительность.

По общей стоимости владения

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

  • Вам нужно шифрование (только Enterprise Edition!)
  • Производительность не является вашей главной задачей, и вы можете сэкономить деньги в долгосрочной перспективе (рассчитать консервативно), используя сжатие
  • У вас много процессов, пишущих одновременно, так как увеличение производительности может спасти вас от вертикального или горизонтального масштабирования.

Обновленный вывод

Для новых проектов я использую WiredTiger сейчас. Поскольку миграция из сжатого в несжатое хранилище WiredTiger довольно проста, я, как правило, начинаю со сжатия, чтобы повысить загрузку ЦП («получи больше денег»). Если сжатие окажет заметное влияние на производительность или UX, я перейду на несжатый WiredTiger.

Для проектов с большим количеством одновременно работающих авторов ответ на вопрос, стоит ли мигрировать или нет, почти всегда тоже "Да" - если только бюджет проекта не запрещает инвестиции. В долгосрочной перспективе повышение производительности должно окупиться, если развертывание было разумно спланировано. Тем не менее, вам нужно добавить некоторое время разработки для расчета, так как в некоторых случаях необходимо обновить драйвер, и могут возникнуть проблемы, которые необходимо устранить.

Для проектов, которые ограничены в бюджете и не могут позволить себе больше дискового пространства на данный момент, миграция на сжатый WiredTiger может быть вариантом, но сжатие создает небольшую нагрузку на процессор, что неслыханно с MMAPv1. Кроме того, затраты на миграцию могут быть слишком дорогими для такого проекта.

Маркус В. Мальберг
источник
Спасибо Маркус за ваш ответ. Я понимаю ваши аргументы. Вы бы даже посоветовали вернуться к MMAPv1 для новых проектов? Я имею в виду, если производительность является проблемой, сжатие также может быть полностью отключено. Дисковое пространство дешевое, но сжатие может помочь рабочему устройству поместиться в ОЗУ ... и, таким образом, получить больше производительности. Или я не прав?
Бузут
1
Насколько я знаю, сжатие применяется только к файлам данных. Что касается новых проектов, позвольте мне выразиться так: я бы призвал к принятию управленческого решения, показывая плюсы и минусы. Я лично использую WT в одном из моих проектов и еще не сталкивался с проблемами, но могут быть и другие факторы, такие как SLA (которые я могу рассчитать довольно хорошо, основываясь на опыте с mmapv1), ограниченные бюджеты (что потребовало бы сжатия WT для сэкономить место на диске) и много других факторов. Взвешивание рисков и возможностей не является решением DBA. Администратор базы данных должен предоставить информацию, необходимую для совершения звонка.
Маркус У Малберг
1
Эта статья, кажется, указывает на то, что способ хранения индексов является довольно большим преимуществом, поскольку он может уменьшить пространство, занимаемое вашими индексами, в 10 раз: ilearnasigoalong.blogspot.com/2015/03/… . Дисковое пространство дешево, но оперативной памяти нет.
BT
Я немного озадачен вашим мнением о возможностях. Вы говорите, что у MMAPv1 есть функции, которых нет у WiredTiger? Было бы неплохо, если бы этот раздел был немного понятнее.
BT
@BT Совсем нет. То, что я пытался сказать, - это то, что у WT есть довольно интересные функции, которые в некоторых случаях могут быть полезны, но не являются общими. Я предпочитаю проверенный в бою механизм хранения, а не передовой, когда дело доходит до хранения данных. Согласно статье: Да, с помощью префикса сжатия можно сэкономить ОЗУ, и это может быть хорошей идеей, если бы не было других проблем. Представьте, что вы можете быть надежным в случае потери данных или проблем с производительностью.
Маркус В. Мальберг
5

Мои два цента:

Ведение журнала в WiredTiger может привести к потере обновлений при жестком завершении работы, поскольку он использует буферизацию в памяти для хранения записей журнала.

Между операциями записи, пока записи журнала остаются в буферах WiredTiger, обновления могут быть потеряны после жесткого отключения mongod.

Ведение журнала в MMAPv1 записывает изменения в файлы журнала на диске.

Если произошел сбой экземпляра mongod без применения операций записи к файлам данных, журнал может воспроизвести записи в общем представлении для возможной записи в файлы данных.

gabrielgiussi
источник
4

Мы перешли на WiredTiger с MMAPv1 на прирост производительности от 7х до 10х. Нам пришлось вернуться к MMAPv1, так как MongoDB блокировался, когда кеш WiredTiger достигал 100%. Мы задокументировали наш опыт здесь - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/

Ананд
источник
2
Хорошая рецензия. Кинда напоминает мне, что Uber перешел из MySQL в PostgreSQL в 2013 году, а затем вернулся в MySQL в июне 2016 года.
RolandoMySQLDBA
хорошо объяснено, у нас также есть такой же опыт работы с проводным тигром, поэтому пересмотрел его до MMAPV1
viren