SlideShare a Scribd company logo
1 of 46
MySQL vs MongoDB
Что лучше использовать в каких случаях
Петр Зайцев
CEO, Percona
7 November 2016
2
MySQL vs MongoDB
VS
3
Реальный Выбор
Какие из открытых баз
данных имеет смысл
использовать для
проекта
4
Открытые Базы Данных ?
Многие лидирующие компании и другие организации
выбирают Открытые технологии в первую очередь
Не требуется лицензия – легко экспериментировать
Вопросы адекватное поддержки встают позже при
запуске приложения
5
Тренд популярности открытых баз данных
6
Открытые БД доминируют в новых подходах
7
Несколько баз данных. Несколько подходов
Выбирается Несколько
«Баз Данных» чтобы
использовать их
сильные стороны
Найти баланс так как
много технологий
сложно поддерживать
8
Подходы к Архитектуре
Основное Операционное Хранилище
данных + дополнительные сервисы
Микросервисы с разными
Основными Хранилищами
9
Пример
Основное Хранилище на MySQL
Redis/Memcache для кэширования
Elastic Search/Sphinx для поиска
Kafka для передачи данных в систему аналитики
10
Выбор для Основного Хранилища Данных
Реляционное
(SQL)
Не
Реляционное
(NoSQL)
11
NoSQL – Модели данных
Key Value
•Memcache
Document
•MongoDB
Wide Column
•Cassandra
12
Почему MySQL vs MongoDB
13
Почему MySQL vs MongoDB
В Percona мы наиболее плотно занимаемся этими
технологиями
Обе технологии изначально ориентированы на
разработчиков простых приложений
MongoDB изначально фокусировалась на пользователях
MySQL
14
MySQL & MongoDB в Percona
MySQL
• Percona Server for MySQL
• Percona XtraDB Cluster
• Percona Toolkit
• Percona Xtrabackup
• Percona Monitoring and
Management
• RocksDB Storage Engine (MyRocks в
разработке)
• TokuDB Storage Engine
MongoDB
• Percona Server for MongoDB
• MongoDB Consistent Backup (built in)
• Percona Toolkit for MongoDB (в
разработке)
• Percona Monitoring and
Management
• RocksDB Storage Engine
(MongoRocks)
• Percona Memory Storage Engine
15
Для полной прозрачности
Я знаю MySQL куда
лучше чем MongoDB и
лучше знаю как работать
с его недостатками
16
Выбор MySQL vs MongoDB
Опыт и предпочтения команды
Подход к разработке и цикл жизни приложения
Модель Данных
Транзакции и Консистентность (ACID)
Производительность
Масштабируемость
Администрирование
17
Опыт и предпочтение Команды
Ключевой вопрос!
Многие задачи можно решить разными способами
Оригинальная разработка и сопровождение
18
Опыт и Предпочтения Команды
MySQL
• Проверенные технологии
• SQL стандарт
• Возможность миграции на другие
SQL базы данных
• Транзакции
• Возможности тонкой настройки
• Сложные запросы через SQL
MongoDB
• Гибкий JSON формат документов
• Не нужно учить сложный SQL
• Простые запросы реже создают
проблемы
• Можно динамически менять схему
документа
• Встроенная Масштабируемость
• Сложные запросы на стороне
приложения
19
Подход к Разработке и Жизненный Цикл Приложений
Быстрая Разработка или Больший Контроль
У данных всегда есть схема
Если с данными работает одно приложение то схему можно держать в приложении если нет то в
базе
Время Жизни приложений
Время Активной Разработки приложений
20
Разработка MySQL vs MongoDB
MySQL
• Реляционная структура требует
большего планирования и
контроля
• Данные легко использовать из
разных приложений
• Много приложений 15+ лет
• Гибкость
MongoDB
• Скорость разработки
• Не нужно синхронизировать
схему в базе данных и
приложении
• Понятный путь к
масштабируемости
• Простые предписанные
решения
21
Модель данных
Оптимальная модель зависит
от приложения и опыта
команды
22
Модель Данных MySQL vs MongoDB
MySQL
• Реляционная модель данных
• Легко отображать связи
между данными
• Изменение данных в одном
месте
• Результат всегда таблица
MongoDB
• Модель данных основанная
на документах
• Просто отображать данные
веб приложений
• Не требуется сложных JOIN
• Результат список документов
(разной структуры)
23
Модель Данных Пример – Контакт Лист
Реляционная База Данных
• Имя, Фамилия, Дата рождения
• У человека может быть
несколько телефонов и адресов
• Надо создать для них отдельные
таблицы
• Массивы JSON –
нетрадиционные расширения
Документориентированная база
данных
• Хранится все в одной
«коллекции»
• Массивы, вложенные
документы
24
Термины
MySQL
• База Данных
• Таблица
• Строка
• Колонка
• Индекс
• Первичный Ключ
• JOIN
• Ограничения (Check Constraints)
MongoDB
• База Данных
• Коллекция
• Документ
• Поле
• Индекс
• Первичный Ключ
• Сcылка или Встроенный Документ
• Правила Валидации
25
CRUD
CREATE – Создавать документ
READ – Читать документ
UPDATE – Изменять документ
DELETE – Удалять документ
26
SQL vs CRUD - Insert
• SQL • CRUD
27
SQL vs CRUD Update
28
SQL vs CRUD - Delete
29
SQL vs CRUD - Search
30
SQL vs CRUD - Count
31
SQL vs CRUD - Aggregation
32
Транзакции и Консистентность (ACID)
Какие операции могут быть атомарными (A)
Гарантируют ли операции консистентое состояние базы данных (C)
Как разные операции изолируются друг от друга (I)
Насколько надежно сохраняются результаты операции (D)
33
Транзакции и Консистентность
MySQL
• Поддерживает транзакции
произвольного размера
• Атомарность в смысле транзакций
• Консистентность на уровне транзакций
для одного узла.
• Выбор уровней изоляции READ
UNCOMMITTED … SERIALIZABLE
• Конфигурируется на уровне узла (для
одиночного узла и репликации)
MongoDB
• Не поддерживает транзакции но
атомарные операции над документом
• Консистентность на уровне документов.
Гибкая консистентность в кластере
• На уроне документов. Чтение
нескольких документов «Изолировано»
от обновлений
• Можно управлять сохранением данных
для одного узла и репликации на уровне
операций
34
Производительность
Производительность очень сложно сравнивать
напрямую
Зависит от дизайна приложения в первую очередь
Так как MongoDB хорошо масштабируется меньше
внимания уделяется эффективности
35
Производительность MySQL vs MongoDB
Mark Callaghan: http://bit.ly/2epDJqD
36
Масштабируемость
Насколько легко сделать из маленького приложения
большое
Масштабируемость в рамках одной машины и многих
машин
Масштабируемость в рамках чтения, записи, объема
данных
37
Масштабируемость MySQL vs MongoDB
MySQL
• Хорошая масштабируемость в рамках
одного узла
• Легко масштабировать «средние»
приложения
• Масштабирование чтения репликацией
• Масштабирование записи и размера
данных через Шардинг
• Шардинг выполняется в ручную и часто
требует привлечения разработчиков
MongoDB
• Изначальный фокус на
масштабируемости на многих узлах
• Обычно используется шардинг
изначально
• Встроенный и простой шардинг
• Шардинг - основной способ
масштабируемости
38
Администрирование
О чем НЕ думают разработчики
По крайней мере не в первую очередь
Автоматизация деплоймента
Резервное копирование
Обновление Версий
Мониторинг
Восстановление при сбоях
Анализ производительности
39
Администрирование MySQL vs MongoDB
MySQL
• Гибкость
• Много разных подходов и решений
• Есть Open Source реализации для
всего
• Много вариантов порождает
сложность
MongoDB
• Минимизация администрирования
• Автоматическое восстановление
при сбоях
• Идея – дать один стандартный
подход
• Мало хороших Open Source
решений
• Сильная привязка к MongoDB Ops
Manager в подходах
40
Это было в прошлом
MySQL
• Поддержка только
реляционной структуры
• Поддержка только языка SQL
для интерфейса
MongoDB
• Большие проблемы с
производительностью записи в
MMAP
• Неэффективное использование
дискового простанства MMAP
• Нет контроля схемы
• Нет аналога “JOIN”
41
Типичный пример: MySQL
• Важны полноценные транзакции
• Реляционная модель хорошо подходит
• Полезно обновление данных в одном месте
• Не очень большой объем данных и операций – не
нужен шардинг
• Постоянная разработка приложения в течение многих
лет
• Многие приложения используют и изменяют одни и
те же данные
Сайт
Электронной
Коммерции
42
Типичный пример: MongoDB
• Масштабируемость очень важна, если игра
«выстрелит»
• Единственное приложение использует данные
• Схема данных сложная и не хорошо ложится на
реляционную
• Консистентность данны на уровне объектов
достаточна
• Не очень активная разработка после запуска игры
Бэкенд
большой
онлайн
игры
43
Дополнительная Информация
• http://www.mongodb-is-web-scale.com/
44
Percona Live: Call for Papers Deadline - November 13
Percona Live Santa Clara to take place April 24-27 in Santa Clara, CA.
Submission Guidelines:
http://bit.ly/2exss8u
Submission Form:
http://bit.ly/2e01oT2
45
Thank You!

More Related Content

What's hot

Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Ontico
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 

What's hot (20)

HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
 
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...Опыт построения СХД на базе Windows Server для использования в публичном обла...
Опыт построения СХД на базе Windows Server для использования в публичном обла...
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 

Similar to MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)

Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Yandex
 
14 расширенные возможности корпоративных субд
14 расширенные возможности корпоративных субд14 расширенные возможности корпоративных субд
14 расширенные возможности корпоративных субд
KewpaN
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest
 

Similar to MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona) (20)

Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Software craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionSoftware craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interaction
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды Web
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
14 расширенные возможности корпоративных субд
14 расширенные возможности корпоративных субд14 расширенные возможности корпоративных субд
14 расширенные возможности корпоративных субд
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данных
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данных
 
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
 
NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)

  • 1. MySQL vs MongoDB Что лучше использовать в каких случаях Петр Зайцев CEO, Percona 7 November 2016
  • 3. 3 Реальный Выбор Какие из открытых баз данных имеет смысл использовать для проекта
  • 4. 4 Открытые Базы Данных ? Многие лидирующие компании и другие организации выбирают Открытые технологии в первую очередь Не требуется лицензия – легко экспериментировать Вопросы адекватное поддержки встают позже при запуске приложения
  • 6. 6 Открытые БД доминируют в новых подходах
  • 7. 7 Несколько баз данных. Несколько подходов Выбирается Несколько «Баз Данных» чтобы использовать их сильные стороны Найти баланс так как много технологий сложно поддерживать
  • 8. 8 Подходы к Архитектуре Основное Операционное Хранилище данных + дополнительные сервисы Микросервисы с разными Основными Хранилищами
  • 9. 9 Пример Основное Хранилище на MySQL Redis/Memcache для кэширования Elastic Search/Sphinx для поиска Kafka для передачи данных в систему аналитики
  • 10. 10 Выбор для Основного Хранилища Данных Реляционное (SQL) Не Реляционное (NoSQL)
  • 11. 11 NoSQL – Модели данных Key Value •Memcache Document •MongoDB Wide Column •Cassandra
  • 13. 13 Почему MySQL vs MongoDB В Percona мы наиболее плотно занимаемся этими технологиями Обе технологии изначально ориентированы на разработчиков простых приложений MongoDB изначально фокусировалась на пользователях MySQL
  • 14. 14 MySQL & MongoDB в Percona MySQL • Percona Server for MySQL • Percona XtraDB Cluster • Percona Toolkit • Percona Xtrabackup • Percona Monitoring and Management • RocksDB Storage Engine (MyRocks в разработке) • TokuDB Storage Engine MongoDB • Percona Server for MongoDB • MongoDB Consistent Backup (built in) • Percona Toolkit for MongoDB (в разработке) • Percona Monitoring and Management • RocksDB Storage Engine (MongoRocks) • Percona Memory Storage Engine
  • 15. 15 Для полной прозрачности Я знаю MySQL куда лучше чем MongoDB и лучше знаю как работать с его недостатками
  • 16. 16 Выбор MySQL vs MongoDB Опыт и предпочтения команды Подход к разработке и цикл жизни приложения Модель Данных Транзакции и Консистентность (ACID) Производительность Масштабируемость Администрирование
  • 17. 17 Опыт и предпочтение Команды Ключевой вопрос! Многие задачи можно решить разными способами Оригинальная разработка и сопровождение
  • 18. 18 Опыт и Предпочтения Команды MySQL • Проверенные технологии • SQL стандарт • Возможность миграции на другие SQL базы данных • Транзакции • Возможности тонкой настройки • Сложные запросы через SQL MongoDB • Гибкий JSON формат документов • Не нужно учить сложный SQL • Простые запросы реже создают проблемы • Можно динамически менять схему документа • Встроенная Масштабируемость • Сложные запросы на стороне приложения
  • 19. 19 Подход к Разработке и Жизненный Цикл Приложений Быстрая Разработка или Больший Контроль У данных всегда есть схема Если с данными работает одно приложение то схему можно держать в приложении если нет то в базе Время Жизни приложений Время Активной Разработки приложений
  • 20. 20 Разработка MySQL vs MongoDB MySQL • Реляционная структура требует большего планирования и контроля • Данные легко использовать из разных приложений • Много приложений 15+ лет • Гибкость MongoDB • Скорость разработки • Не нужно синхронизировать схему в базе данных и приложении • Понятный путь к масштабируемости • Простые предписанные решения
  • 21. 21 Модель данных Оптимальная модель зависит от приложения и опыта команды
  • 22. 22 Модель Данных MySQL vs MongoDB MySQL • Реляционная модель данных • Легко отображать связи между данными • Изменение данных в одном месте • Результат всегда таблица MongoDB • Модель данных основанная на документах • Просто отображать данные веб приложений • Не требуется сложных JOIN • Результат список документов (разной структуры)
  • 23. 23 Модель Данных Пример – Контакт Лист Реляционная База Данных • Имя, Фамилия, Дата рождения • У человека может быть несколько телефонов и адресов • Надо создать для них отдельные таблицы • Массивы JSON – нетрадиционные расширения Документориентированная база данных • Хранится все в одной «коллекции» • Массивы, вложенные документы
  • 24. 24 Термины MySQL • База Данных • Таблица • Строка • Колонка • Индекс • Первичный Ключ • JOIN • Ограничения (Check Constraints) MongoDB • База Данных • Коллекция • Документ • Поле • Индекс • Первичный Ключ • Сcылка или Встроенный Документ • Правила Валидации
  • 25. 25 CRUD CREATE – Создавать документ READ – Читать документ UPDATE – Изменять документ DELETE – Удалять документ
  • 26. 26 SQL vs CRUD - Insert • SQL • CRUD
  • 27. 27 SQL vs CRUD Update
  • 28. 28 SQL vs CRUD - Delete
  • 29. 29 SQL vs CRUD - Search
  • 30. 30 SQL vs CRUD - Count
  • 31. 31 SQL vs CRUD - Aggregation
  • 32. 32 Транзакции и Консистентность (ACID) Какие операции могут быть атомарными (A) Гарантируют ли операции консистентое состояние базы данных (C) Как разные операции изолируются друг от друга (I) Насколько надежно сохраняются результаты операции (D)
  • 33. 33 Транзакции и Консистентность MySQL • Поддерживает транзакции произвольного размера • Атомарность в смысле транзакций • Консистентность на уровне транзакций для одного узла. • Выбор уровней изоляции READ UNCOMMITTED … SERIALIZABLE • Конфигурируется на уровне узла (для одиночного узла и репликации) MongoDB • Не поддерживает транзакции но атомарные операции над документом • Консистентность на уровне документов. Гибкая консистентность в кластере • На уроне документов. Чтение нескольких документов «Изолировано» от обновлений • Можно управлять сохранением данных для одного узла и репликации на уровне операций
  • 34. 34 Производительность Производительность очень сложно сравнивать напрямую Зависит от дизайна приложения в первую очередь Так как MongoDB хорошо масштабируется меньше внимания уделяется эффективности
  • 35. 35 Производительность MySQL vs MongoDB Mark Callaghan: http://bit.ly/2epDJqD
  • 36. 36 Масштабируемость Насколько легко сделать из маленького приложения большое Масштабируемость в рамках одной машины и многих машин Масштабируемость в рамках чтения, записи, объема данных
  • 37. 37 Масштабируемость MySQL vs MongoDB MySQL • Хорошая масштабируемость в рамках одного узла • Легко масштабировать «средние» приложения • Масштабирование чтения репликацией • Масштабирование записи и размера данных через Шардинг • Шардинг выполняется в ручную и часто требует привлечения разработчиков MongoDB • Изначальный фокус на масштабируемости на многих узлах • Обычно используется шардинг изначально • Встроенный и простой шардинг • Шардинг - основной способ масштабируемости
  • 38. 38 Администрирование О чем НЕ думают разработчики По крайней мере не в первую очередь Автоматизация деплоймента Резервное копирование Обновление Версий Мониторинг Восстановление при сбоях Анализ производительности
  • 39. 39 Администрирование MySQL vs MongoDB MySQL • Гибкость • Много разных подходов и решений • Есть Open Source реализации для всего • Много вариантов порождает сложность MongoDB • Минимизация администрирования • Автоматическое восстановление при сбоях • Идея – дать один стандартный подход • Мало хороших Open Source решений • Сильная привязка к MongoDB Ops Manager в подходах
  • 40. 40 Это было в прошлом MySQL • Поддержка только реляционной структуры • Поддержка только языка SQL для интерфейса MongoDB • Большие проблемы с производительностью записи в MMAP • Неэффективное использование дискового простанства MMAP • Нет контроля схемы • Нет аналога “JOIN”
  • 41. 41 Типичный пример: MySQL • Важны полноценные транзакции • Реляционная модель хорошо подходит • Полезно обновление данных в одном месте • Не очень большой объем данных и операций – не нужен шардинг • Постоянная разработка приложения в течение многих лет • Многие приложения используют и изменяют одни и те же данные Сайт Электронной Коммерции
  • 42. 42 Типичный пример: MongoDB • Масштабируемость очень важна, если игра «выстрелит» • Единственное приложение использует данные • Схема данных сложная и не хорошо ложится на реляционную • Консистентность данны на уровне объектов достаточна • Не очень активная разработка после запуска игры Бэкенд большой онлайн игры
  • 44. 44 Percona Live: Call for Papers Deadline - November 13 Percona Live Santa Clara to take place April 24-27 in Santa Clara, CA. Submission Guidelines: http://bit.ly/2exss8u Submission Form: http://bit.ly/2e01oT2
  • 45. 45