Сравнительный анализ хранилищ данных, Олег Царев,...
DESCRIPTION
TRANSCRIPT
![Page 1: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/1.jpg)
Сравнительный анализ хранилищ данных
Коринский и Царев
![Page 2: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/2.jpg)
О чём этот доклад?● Существует пропасть между разработчиками и DBA
Отсутствуют популярные материалы по данной теме
● Доклад является обзорным
● Авторы - не DBA!
![Page 3: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/3.jpg)
Зачем нужны транзакции?
● Примеры:● Оплата счёта● Размещение поста в блоге● Покупка билета
![Page 4: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/4.jpg)
Транзакциии● Транзакция - <здесь по идее нужно определение>
● Наивно: последовательность действий, со следующими свойствами:
● Atomic
● Consistence
● Isolated
● durability
![Page 5: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/5.jpg)
Транзакции● Atomic: Последовательность действий
применияется целиком, либо не применяется вообще
● Consistence: Действия оставляют базу в непротиворечивом состоянии.
● Isolated: транзакции работают независимо
● Durability: после применения не может потеряться
![Page 6: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/6.jpg)
Партицирование● Партицирование - деление данных на части между
различными файлами, разделами диска или машинами в кластере.
● Примеры:
● Социальные сети хранят тексты постов и картинки пользователей на различных серверах
● Информация о клиентах мобильного оператора распределена по регионам
● Сервер для обработки пользователя выбирается по первой букве имени
![Page 7: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/7.jpg)
Аспекты партицирования● Виды: способы деления данных на части
● Назначение: какие проблемы решает
● Примеры: использование в реальных проектах
● Enviroment: наличие и условия решений
● Транзакции: как партицирование влияет на транзакции
![Page 8: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/8.jpg)
Функциональная декомпозиция● Суть: Данные бьются на части в соотвествии с
семантикой.
● Возможные критерии:
● Тип данных (текст, картинки, видео)
● Изменчивость данных (статический контент или динамический?)
● Назначение данных (личные данные пользователей, публичные сообщения)
![Page 9: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/9.jpg)
Горизонтальное партицирование● Суть: Множество однотипных данных разделяется на (равные) части
по некоторому критерию
● Критерии:
● Географическая рассредоточенность (в каждом регионе своя база)
● Надежность сервиса (обычные пользователи/платные аккаунты)
● Дата поступления данных (удобство поддержки, снижение нагрузки)
● Хеш-функция: отображение большего множества в меньшее (примеры далее)
![Page 10: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/10.jpg)
Горизонтальное партицирование● Примеры хеш-функций:
● Числа: остаток от деления на десять (десять возможных значений)
● Логин пользователя: первая буква ника (мощность алвафита - множество возможных значений)
● "Идеальная": рабивает множество на равные части (таблица значений функции)
![Page 11: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/11.jpg)
Вертикальное партицирование● Суть: Однотипные данные разделяются
группируются в части по атрибутам
● Критерии:
● Востребованность (часть колонок нужна редко)
● Масштабируемость (равномерно распределяем данные)
![Page 12: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/12.jpg)
Column/Row-oriented system● Суть: данные организуются либо по строкам, либо по
колонкам
● Row-oriented:
● Все атрибуты каждой записи лежат рядом
● Записи лежат в файле последотельно
● Column-oriented:
● Для каждого атрибута отдельный файл
● При чтении необходимо делать соединение
![Page 13: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/13.jpg)
Enviroment● Операционные системы● Файловые системы● Сеть● Аппаратура● Поддержка на уровне хранилища
![Page 14: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/14.jpg)
Транзакции и партицирование● Транзакции вносят свои проблемы:
● atomic: синхронность применения (консистентность)
● consistence: издержки на синхронизацию● isolated: всё хорошо● durability: что там с
отказоустойчивостью?
![Page 15: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/15.jpg)
Репликация● Репликация - способ
синхронизации (приведение в соответствие) частей данных
● Виды репликации:● master-slave● master-master
![Page 16: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/16.jpg)
Master-Slave репликация● Все изменения применяются на
master● Slave-узлы получает обновления с
master● Slave-узлов может быть несколько
![Page 17: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/17.jpg)
Назначение● Резервные копии - плохая идея● Распределение нагрузки● Таргетирование запросов
![Page 18: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/18.jpg)
Таргетирование запросов● Различные хранилища на
master/slave:● master - OLTP, slave – OLAP● master - SQL, slave - документо-
ориентированная база● Скорей всего репликацию придётся писать
руками
![Page 19: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/19.jpg)
Таргетирование запросов● Различная схема данных:
● master содержит просто таблицы для записи● slave имеет дополнительные индексы● slave имеют более узкие типы данных
![Page 20: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/20.jpg)
Таргетирование запросов● Различная схема данных:
● master содержит просто таблицы для записи● slave имеет дополнительные индексы● slave имеют более узкие типы данных
![Page 21: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/21.jpg)
Master-Master репликация● Суть: Изменения производятся
одновременно на нескольких master
● Защищаемся от выхода из строя master-узла
● Снижение нагрузки на master-узел
● Снижение нагрузки от slave-узлов
![Page 22: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/22.jpg)
Транзакции и репликации● Транзакции вносят свои проблемы
● master-slave: транзакции на slave запаздывают
● master-master: как применять транзакции?
![Page 23: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/23.jpg)
Consistency● Система всегда выдает корректные,
непротиворечивые, ответы.
● Данные не могут потеряться после завершения записи.
● Не может быть так, что один и тот же запрос к данным (выборка данных, поиск, и т.д.) в зависимости от узла выдавал различные данные.
![Page 24: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/24.jpg)
Availability● Система обязана всегдавсегда выдавать
ответы - независимо от аппаратных сбоев отдельных узлов.
![Page 25: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/25.jpg)
Partition tolerance● Система продолжает работать корректнокорректно при недоступности части узлов.
![Page 26: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/26.jpg)
Проблема CAP теоремыТолько два из трех
![Page 27: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/27.jpg)
Про что говорим● Voldemort, Riak, cassandra, MySQL
cluster● MongoDB, Hbase,
memcache/memcached, berkleydb● PostgreSQL, MySQL, Oracle, TimesTen
![Page 28: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/28.jpg)
+Consistency +Availability -Partition tolerance
● PostgreSQL● MySQL● Oracle● TimesTen
![Page 29: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/29.jpg)
PostgreSQL● Очень много разных индексов● PostGIS● Репликация внешними средствами● Сложна
![Page 30: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/30.jpg)
MySQL● Привычная база● Есть репликация● Простота поддержки
![Page 31: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/31.jpg)
Oracle● Умеет все● Дорого
![Page 32: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/32.jpg)
TimesTen● Быстрая in memory база● Простота● Цена
![Page 33: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/33.jpg)
PostgreSQL vs MySQL vs Oracle vs TimesTen
● есть деньги oracle/timesten● хватает – postgres● иначе mysql
![Page 34: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/34.jpg)
+Availability +Partition tolerance -Consistency
● Voldemort● Riak● Cassandra● MySQL cluster
![Page 35: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/35.jpg)
Voldemort● Написан на Java, REST● Key-value● LinkedIn● разные backend
![Page 36: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/36.jpg)
Riak● Написан на Erlang, REST● Key-value● разные backend
![Page 37: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/37.jpg)
Riak vs Voldemort● Одинаковы
![Page 38: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/38.jpg)
Cassandra● Написана на Java, Thrift api● Column-oriented● Разные датацентры
![Page 39: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/39.jpg)
MySQL cluster● Написана на С● Честный SQL● in memeory
![Page 40: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/40.jpg)
Riak/Voldemort vs Cassandra vs MySQL cluster
● совместимость MySQL● map reduce: Riak
![Page 41: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/41.jpg)
+Consistency +Partiotion tolerance -Availability
● MongoDB● Hbase● memcache/memcached● berkleydb
![Page 42: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/42.jpg)
MongoDB● Написана на C++, BSON● Key-value● github, sourceforge, bit.ly, disqus
![Page 43: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/43.jpg)
Hbase● Написана на Java, REST● column-oriented
![Page 44: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/44.jpg)
memcache/memcached● Написаны на С, Простой протокол● Key-value● используется везде
![Page 45: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/45.jpg)
berkleydb● Написана на С, C-API● Key-value● стоит денег
![Page 46: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/46.jpg)
MongoDB vs Hbase bs memcached vs berkleydb
● кеш memcached● hbase как замена bigtable● встраиваемая berkleydb
![Page 47: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/47.jpg)
CAP Solution● Жертвуем Consistency● Разбиваем систему на части● Система в разные моменты
времени находиться в разных позициях CAP теоремы
![Page 48: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/48.jpg)
Счастья нет● У каждой задачи свои требования
● У каждого хранилища свои сильные и слабые стороны
● Хранилище под задачу, а не задачу под хранилище
● Одного хранилища мало
● Правильное решение - всегда компромис
![Page 49: Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский](https://reader034.vdocuments.net/reader034/viewer/2022051610/548c9a81b47959776d8b485c/html5/thumbnails/49.jpg)
Any question?
Oleg [email protected]
http://percona.com/
Kirill A. [email protected]
http://www.roox.ru/