SlideShare a Scribd company logo
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

PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PPTX
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
PPTX
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
PPTX
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Как не положить тысячи серверов с помощью системы централизованного управлени...
Балансировка нагрузки и отказоустойчивость в Одноклассниках
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...

What's hot (20)

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

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

PDF
Пётр Зайцев, Percona
PPTX
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
ODP
Scaling Web Sites By Sharding And Replication Hl2008 Rus
PPT
MongoDB basics in Russian
PDF
Не все базы данных одинаково полезны
PDF
Не все базы данных одинаково полезны
PDF
Выступление Сергея Аверина, Badoo, на High Performance Conference
PDF
Моделирование для NoSQL БД
PDF
Распространенные ошибки применения баз данных (Сергей Аверин)
PDF
Дмитрий Долгов
PDF
Распространенные ошибки применения баз данных
PDF
MySQL NDB Cluster
PDF
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
PDF
SQL vs NoSQL: 
проблема выбора
PDF
Tk conf daniel-podolsky-sqlvsnosql
PDF
Nosql and Mongodb
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PDF
State of the dolphin
PDF
Checklistfinal perconaconf
PDF
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Пётр Зайцев, Percona
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
Scaling Web Sites By Sharding And Replication Hl2008 Rus
MongoDB basics in Russian
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Выступление Сергея Аверина, Badoo, на High Performance Conference
Моделирование для NoSQL БД
Распространенные ошибки применения баз данных (Сергей Аверин)
Дмитрий Долгов
Распространенные ошибки применения баз данных
MySQL NDB Cluster
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
SQL vs NoSQL: 
проблема выбора
Tk conf daniel-podolsky-sqlvsnosql
Nosql and Mongodb
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
State of the dolphin
Checklistfinal perconaconf
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Ad

More from Ontico (20)

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