Сильные стороны MySQL для высоконагруженных проектов (Алексей Копытов, OSSDEVCONF-2016)
Аннотация
- Докладчик
- Алексей Копытов
В настоящий момент многим разработчикам и администраторам часто приходится иметь дело со многими разными СУБД. Знание сильных и слабых сторон каждого продукта становится всё более важным навыком. В мире веб-технологий наблюдается значительный интерес к сравнительному анализу двух наиболее популярных СУБД с открытым исходным кодом: MySQL и PostgreSQL. Сообщество PostgreSQL проявляет достойную уважения активность в освещении сильных сторон PostgreSQL и слабых сторон MySQL.
В этом докладе мы поговорим об обратной стороне медали: о том, какие сильные стороны есть у MySQL, какие возможности позволяют этой СУБД обслуживать самые масштабные и высоконагруженные веб-проекты, а также о том, на какие особенности нужно обратить внимание в каждом конкретном проекте в случаях, когда необходимо сделать выбор между MySQL и PostgreSQL.
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Слайды
Расширенные тезисы
В последнее время в русскоязычном IT-сообществе активизировалась дискуссия о достоинствах и недостатках MySQL и PostgreSQL — двух самых популярных СУБД с открытым исходным кодом. При этом в силу разных причин информация, предоставляемая в статьях, обзорах и докладах весьма однобока: принято утверждать, что PostgreSQL превосходит MySQL по всем параметрам, а значит нет никакого смысла использовать эту СУБД, особенно когда речь идёт о новых проектах.
С этим можно было бы согласиться, если бы не два факта, которые не укладываются в такую картину:
- MySQL был и остаётся самой популярной СУБД с открытым исходным кодом. При этом, нет никаких тенденций к снижению этой популярности[1]
- MySQL по-прежнему остаётся самой популярной СУБД в интернет-гигантах. Примеров можно привести огромное количество, вот лишь краткий список наиболее известных компаний и популярных интернет-сервисов: Facebook, Github, Wikipedia, Google, Youtube, LiveJournal, PayPal, Twitter, Booking.com, AirBnB, DropBox, Uber, LinkedIn, Alibaba.
Очевидно, что для этого есть определённые причины, но информацию на эту тему найти довольно трудно. За редкими исключениями (как, например, нашумевшая недавно публикация инженеров компании Uber[2] о причинах перехода с PostgreSQL на MySQL), интернет-гиганты редко деляться результатами внутреннего тестирования и реальных причин использования тех или иных технологий.
Этот доклад — попытка рассмотреть основные причины популярности MySQL, в том числе и в высоконагруженных проектах, с фокусом на функциональность, отсутствующую или реализованную в ограниченном виде в текущих стабильных версиях PostgreSQL.
- реализация репликации в MySQL превосходит PostgreSQL в функциональности и как правило более эффективна в использовании дисковых и сетевых ресурсов. Как показывает опыт таких компаний как Uber и Booking.com, эти преимущества могут стать критичными в масштабных и высоконагруженных проектах;
- InnoDB (основной «движок» хранения данных в MySQL) часто более производителен для многих типичных для веб-проектов операций с данным в силу различных функциональных и архитектурных особенностей:
- поддержка кластеризованных индексов, компрессии данных,
- небуферизованного и асинхронного ввода/вывода,
- изменяемого размера блока данных,
- а также относительная компактность представления данных — каждая из этих характеристик важна для любого нагруженного веб-проекта. В интернет-гигантах эти характеристики часто становятся критическими с точки зрения как производительности, так и стоимости необходимого оборудования.
- альтернативные «движки» хранения, оптимизированные под специфичные нагрузки и разрабатываемые сообществом MySQL, такие как TokuDB или MyRocks[3] , являются важным источником инноваций в MySQL и не имеют аналогов в PostgreSQL. Более того, реализация альтернативных способов хранения данных затруднена отсутствием архитектурной поддержки в PostgreSQL.
- важные в облачных и контейнерных средах функции, такие как прозрачное шифрование данных на диске или переносимые (transportable) табличные пространства обеспечивают популярность MySQL в хостинговых и SaaS компаниях, а также хорошо вписываются в популярную ныне концепцию микросервисов;
- кластерные решения в MySQL (Galera, Group Replication, NDB) представляют из себя результат многих лет исследований, разработки, тестирования, являются ключевыми технологиями при построении распределённых и отказоустойчивых систем на базе MySQL и не имеют прямых аналогов в PostgreSQL;
- секционирование (partitioning) таблиц часто используется в нагруженных проектах с большими объёмами данных. Реализация этой функциональности в PostgreSQL достаточно специфична и сильно уступает MySQL;
- организация физического резервного копирования в PostgreSQL обладает целым рядом недостатков по сравнению с MySQL;
- поддержка key/value API в MySQL (встроенная memcached или сторонняя HandlerSocket) также часто используется в нагруженных интернет проектах, но не имеет аналогов в PostgreSQL;
- и многие другие, не столь популярные функциональные особенности, которые, тем не менее, могут быть критично важными в некоторых случаях.
Доклад не пытается дать ответ на вопрос «Какая СУБД лучше?», так как универсального ответа на этот вопрос просто не существует. Доклад также не пытается предоставить всестороннее сравнение двух СУБД, т.к. это слишком обширная тема. Целью доклада является восполнение информационного пробела в непростом вопросе выбора СУБД в каждом конкретном проекте.
Примечания и отзывы
- ↑ DB-Engines Ranking --- Trend Popularity http://db-engines.com/en/ranking_trend/
- ↑ Why Uber Engineering Switched from Postgres to MySQL
- ↑ MyRocks: A space- and write-optimized MySQL database http://bit.ly/2cRgS8y
Plays:177 Comments:1