mysql® и mongodb® - когда что лучше использовать? / Петр...

46
MySQL vs MongoDB Что лучше использовать в каких случаях Петр Зайцев CEO, Percona 7 November 2016

Upload: ontico

Post on 16-Apr-2017

1.018 views

Category:

Engineering


6 download

TRANSCRIPT

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

MySQL vs MongoDBЧто лучше использовать в каких случаях

Петр Зайцев

CEO, Percona

7 November 2016

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

2

MySQL vs MongoDB

VS

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

3

Реальный Выбор

Какие из открытых баз данных имеет смысл использовать для проекта

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

4

Открытые Базы Данных ?

Многие лидирующие компании и другие организации выбирают Открытые технологии в первую очередь

Не требуется лицензия – легко экспериментировать

Вопросы адекватное поддержки встают позже при запуске приложения

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

5

Тренд популярности открытых баз данных

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

6

Открытые БД доминируют в новых подходах

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

7

Несколько баз данных. Несколько подходов

Выбирается Несколько «Баз Данных» чтобы

использовать их сильные стороны

Найти баланс так как много технологий

сложно поддерживать

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

8

Подходы к Архитектуре

Основное Операционное Хранилище данных + дополнительные сервисы

Микросервисы с разными Основными Хранилищами

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

9

Пример

Основное Хранилище на MySQL

Redis/Memcache для кэширования

Elastic Search/Sphinx для поиска

Kafka для передачи данных в систему аналитики

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

10

Выбор для Основного Хранилища Данных

Реляционное (SQL) Не Реляционное (NoSQL)

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

11

NoSQL – Модели данных

Key Value

•Memcache

Document

•MongoDB

Wide Column

•Cassandra

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

12

Почему MySQL vs MongoDB

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

13

Почему MySQL vs MongoDB

В Percona мы наиболее плотно занимаемся этими технологиями

Обе технологии изначально ориентированы на разработчиков простых приложений

MongoDB изначально фокусировалась на пользователях MySQL

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

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

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

15

Для полной прозрачности

Я знаю MySQL куда лучше чем MongoDB и

лучше знаю как работать с его недостатками

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

16

Выбор MySQL vs MongoDB

Опыт и предпочтения команды

Подход к разработке и цикл жизни приложения

Модель Данных

Транзакции и Консистентность (ACID)

Производительность

Масштабируемость

Администрирование

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

17

Опыт и предпочтение Команды

Ключевой вопрос!

Многие задачи можно решить разными способами

Оригинальная разработка и сопровождение

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

18

Опыт и Предпочтения Команды

MySQL•Проверенные технологии•SQL стандарт •Возможность миграции на другие SQL базы данных•Транзакции •Возможности тонкой настройки•Сложные запросы через SQL

MongoDB•Гибкий JSON формат документов•Не нужно учить сложный SQL•Простые запросы реже создают проблемы •Можно динамически менять схему документа•Встроенная Масштабируемость•Сложные запросы на стороне приложения

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

19

Подход к Разработке и Жизненный Цикл Приложений

Быстрая Разработка или Больший Контроль

У данных всегда есть схема

Если с данными работает одно приложение то схему можно держать в приложении если нет то в базе

Время Жизни приложений

Время Активной Разработки приложений

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

20

Разработка MySQL vs MongoDB

MySQL

• Реляционная структура требует большего планирования и контроля

• Данные легко использовать из разных приложений

• Много приложений 15+ лет • Гибкость

MongoDB

• Скорость разработки• Не нужно синхронизировать

схему в базе данных и приложении

• Понятный путь к масштабируемости

• Простые предписанные решения

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

21

Модель данных

Оптимальная модель зависит от приложения и опыта команды

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

22

Модель Данных MySQL vs MongoDB

MySQL•Реляционная модель данных•Легко отображать связи между данными•Изменение данных в одном месте•Результат всегда таблица

MongoDB•Модель данных основанная на документах•Просто отображать данные веб приложений•Не требуется сложных JOIN•Результат список документов (разной структуры)

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

23

Модель Данных Пример – Контакт Лист

Реляционная База Данных

• Имя, Фамилия, Дата рождения • У человека может быть

несколько телефонов и адресов • Надо создать для них отдельные

таблицы• Массивы JSON –

нетрадиционные расширения

Документориентированная база данных

• Хранится все в одной «коллекции»

• Массивы, вложенные документы

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

24

Термины

MySQL•База Данных•Таблица•Строка•Колонка•Индекс•Первичный Ключ•JOIN•Ограничения (Check Constraints)

MongoDB•База Данных•Коллекция•Документ•Поле•Индекс•Первичный Ключ•Сcылка или Встроенный Документ•Правила Валидации

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

25

CRUD

CREATE – Создавать документ

READ – Читать документ

UPDATE – Изменять документ

DELETE – Удалять документ

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

26

SQL vs CRUD - Insert

• SQL • CRUD

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

27

SQL vs CRUD Update

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

28

SQL vs CRUD - Delete

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

29

SQL vs CRUD - Search

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

30

SQL vs CRUD - Count

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

31

SQL vs CRUD - Aggregation

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

32

Транзакции и Консистентность (ACID)

Какие операции могут быть атомарными (A)

Гарантируют ли операции консистентое состояние базы данных (C)

Как разные операции изолируются друг от друга (I)

Насколько надежно сохраняются результаты операции (D)

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

33

Транзакции и Консистентность

MySQL

• Поддерживает транзакции произвольного размера

• Атомарность в смысле транзакций• Консистентность на уровне транзакций

для одного узла.• Выбор уровней изоляции READ

UNCOMMITTED … SERIALIZABLE • Конфигурируется на уровне узла (для

одиночного узла и репликации)

MongoDB

• Не поддерживает транзакции но атомарные операции над документом

• Консистентность на уровне документов. Гибкая консистентность в кластере

• На уроне документов. Чтение нескольких документов «Изолировано» от обновлений

• Можно управлять сохранением данных для одного узла и репликации на уровне операций

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

34

Производительность

Производительность очень сложно сравнивать напрямую

Зависит от дизайна приложения в первую очередь

Так как MongoDB хорошо масштабируется меньше внимания уделяется эффективности

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

35

Производительность MySQL vs MongoDB

Mark Callaghan: http://bit.ly/2epDJqD

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

36

Масштабируемость

Насколько легко сделать из маленького приложения большое

Масштабируемость в рамках одной машины и многих машин

Масштабируемость в рамках чтения, записи, объема данных

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

37

Масштабируемость MySQL vs MongoDB

MySQL

• Хорошая масштабируемость в рамках одного узла

• Легко масштабировать «средние» приложения

• Масштабирование чтения репликацией• Масштабирование записи и размера

данных через Шардинг• Шардинг выполняется в ручную и часто

требует привлечения разработчиков

MongoDB

• Изначальный фокус на масштабируемости на многих узлах

• Обычно используется шардинг изначально

• Встроенный и простой шардинг• Шардинг - основной способ

масштабируемости

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

38

Администрирование

О чем НЕ думают разработчики

По крайней мере не в первую очередь

Автоматизация деплоймента

Резервное копирование

Обновление Версий

Мониторинг

Восстановление при сбоях

Анализ производительности

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

39

Администрирование MySQL vs MongoDB

MySQL

• Гибкость• Много разных подходов и решений • Есть Open Source реализации для

всего• Много вариантов порождает

сложность

MongoDB

• Минимизация администрирования • Автоматическое восстановление

при сбоях• Идея – дать один стандартный

подход • Мало хороших Open Source

решений• Сильная привязка к MongoDB Ops

Manager в подходах

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

40

Это было в прошлом

MySQL

• Поддержка только реляционной структуры

• Поддержка только языка SQL для интерфейса

MongoDB

• Большие проблемы с производительностью записи в MMAP

• Неэффективное использование дискового простанства MMAP

• Нет контроля схемы • Нет аналога “JOIN”

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

41

Типичный пример: MySQL

• Важны полноценные транзакции• Реляционная модель хорошо подходит • Полезно обновление данных в одном месте • Не очень большой объем данных и операций – не

нужен шардинг• Постоянная разработка приложения в течение многих

лет• Многие приложения используют и изменяют одни и

те же данные

Сайт Электронно

й Коммерции

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

42

Типичный пример: MongoDB

• Масштабируемость очень важна, если игра «выстрелит»

• Единственное приложение использует данные • Схема данных сложная и не хорошо ложится на

реляционную• Консистентность данны на уровне объектов

достаточна • Не очень активная разработка после запуска игры

Бэкенд большо

й онлайн

игры

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

43

Дополнительная Информация

• http://www.mongodb-is-web-scale.com/

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

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

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

45

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

Thank You!