Cравнительный анализ хранилищ данных (Олег Царев,...

49
Сравнительный анализ хранилищ данных Коринский и Царев

Transcript of Cравнительный анализ хранилищ данных (Олег Царев,...

Page 1: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Сравнительный анализ хранилищ данных

Коринский и Царев

Page 2: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

О чём этот доклад?● Существует пропасть между разработчиками и DBA

Отсутствуют популярные материалы по данной теме

● Доклад является обзорным

● Авторы - не DBA!

Page 3: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Зачем нужны транзакции?

● Примеры:● Оплата счёта● Размещение поста в блоге● Покупка билета

Page 4: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Транзакциии● Транзакция - <здесь по идее нужно определение>

● Наивно: последовательность действий, со следующими свойствами:

● Atomic

● Consistence

● Isolated

● durability

Page 5: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Транзакции● Atomic: Последовательность действий

применияется целиком, либо не применяется вообще

● Consistence: Действия оставляют базу в непротиворечивом состоянии.

● Isolated: транзакции работают независимо

● Durability: после применения не может потеряться

Page 6: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Партицирование● Партицирование - деление данных на части между

различными файлами, разделами диска или машинами в кластере.

● Примеры:

● Социальные сети хранят тексты постов и картинки пользователей на различных серверах

● Информация о клиентах мобильного оператора распределена по регионам

● Сервер для обработки пользователя выбирается по первой букве имени

Page 7: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Аспекты партицирования● Виды: способы деления данных на части

● Назначение: какие проблемы решает

● Примеры: использование в реальных проектах

● Enviroment: наличие и условия решений

● Транзакции: как партицирование влияет на транзакции

Page 8: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Функциональная декомпозиция● Суть: Данные бьются на части в соотвествии с

семантикой.

● Возможные критерии:

● Тип данных (текст, картинки, видео)

● Изменчивость данных (статический контент или динамический?)

● Назначение данных (личные данные пользователей, публичные сообщения)

Page 9: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Горизонтальное партицирование● Суть: Множество однотипных данных разделяется на (равные) части

по некоторому критерию

● Критерии:

● Географическая рассредоточенность (в каждом регионе своя база)

● Надежность сервиса (обычные пользователи/платные аккаунты)

● Дата поступления данных (удобство поддержки, снижение нагрузки)

● Хеш-функция: отображение большего множества в меньшее (примеры далее)

Page 10: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Горизонтальное партицирование● Примеры хеш-функций:

● Числа: остаток от деления на десять (десять возможных значений)

● Логин пользователя: первая буква ника (мощность алвафита - множество возможных значений)

● "Идеальная": рабивает множество на равные части (таблица значений функции)

Page 11: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Вертикальное партицирование● Суть: Однотипные данные разделяются

группируются в части по атрибутам

● Критерии:

● Востребованность (часть колонок нужна редко)

● Масштабируемость (равномерно распределяем данные)

Page 12: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Column/Row-oriented system● Суть: данные организуются либо по строкам, либо по

колонкам

● Row-oriented:

● Все атрибуты каждой записи лежат рядом

● Записи лежат в файле последотельно

● Column-oriented:

● Для каждого атрибута отдельный файл

● При чтении необходимо делать соединение

Page 13: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Enviroment● Операционные системы● Файловые системы● Сеть● Аппаратура● Поддержка на уровне хранилища

Page 14: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Транзакции и партицирование● Транзакции вносят свои проблемы:

● atomic: синхронность применения (консистентность)

● consistence: издержки на синхронизацию● isolated: всё хорошо● durability: что там с

отказоустойчивостью?

Page 15: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Репликация● Репликация - способ

синхронизации (приведение в соответствие) частей данных

● Виды репликации:● master-slave● master-master

Page 16: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Master-Slave репликация● Все изменения применяются на

master● Slave-узлы получает обновления с

master● Slave-узлов может быть несколько

Page 17: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Назначение● Резервные копии - плохая идея● Распределение нагрузки● Таргетирование запросов

Page 18: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Таргетирование запросов● Различные хранилища на

master/slave:● master - OLTP, slave – OLAP● master - SQL, slave - документо-

ориентированная база● Скорей всего репликацию придётся писать

руками

Page 19: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Таргетирование запросов● Различная схема данных:

● master содержит просто таблицы для записи● slave имеет дополнительные индексы● slave имеют более узкие типы данных

Page 20: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Таргетирование запросов● Различная схема данных:

● master содержит просто таблицы для записи● slave имеет дополнительные индексы● slave имеют более узкие типы данных

Page 21: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Master-Master репликация● Суть: Изменения производятся

одновременно на нескольких master

● Защищаемся от выхода из строя master-узла

● Снижение нагрузки на master-узел

● Снижение нагрузки от slave-узлов

Page 22: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Транзакции и репликации● Транзакции вносят свои проблемы

● master-slave: транзакции на slave запаздывают

● master-master: как применять транзакции?

Page 23: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Consistency● Система всегда выдает корректные,

непротиворечивые, ответы.

● Данные не могут потеряться после завершения записи.

● Не может быть так, что один и тот же запрос к данным (выборка данных, поиск, и т.д.) в зависимости от узла выдавал различные данные.

Page 24: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Availability● Система обязана всегдавсегда выдавать

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

Page 25: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Partition tolerance● Система продолжает работать корректнокорректно при недоступности части узлов.

Page 26: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Проблема CAP теоремыТолько два из трех

Page 27: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Про что говорим● Voldemort, Riak, cassandra, MySQL

cluster● MongoDB, Hbase,

memcache/memcached, berkleydb● PostgreSQL, MySQL, Oracle, TimesTen

Page 28: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

+Consistency +Availability -Partition tolerance

● PostgreSQL● MySQL● Oracle● TimesTen

Page 29: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

PostgreSQL● Очень много разных индексов● PostGIS● Репликация внешними средствами● Сложна

Page 30: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

MySQL● Привычная база● Есть репликация● Простота поддержки

Page 31: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Oracle● Умеет все● Дорого

Page 32: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

TimesTen● Быстрая in memory база● Простота● Цена

Page 33: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

PostgreSQL vs MySQL vs Oracle vs TimesTen

● есть деньги oracle/timesten● хватает – postgres● иначе mysql

Page 34: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

+Availability +Partition tolerance -Consistency

● Voldemort● Riak● Cassandra● MySQL cluster

Page 35: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Voldemort● Написан на Java, REST● Key-value● LinkedIn● разные backend

Page 36: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Riak● Написан на Erlang, REST● Key-value● разные backend

Page 37: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Riak vs Voldemort● Одинаковы

Page 38: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Cassandra● Написана на Java, Thrift api● Column-oriented● Разные датацентры

Page 39: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

MySQL cluster● Написана на С● Честный SQL● in memeory

Page 40: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Riak/Voldemort vs Cassandra vs MySQL cluster

● совместимость MySQL● map reduce: Riak

Page 41: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

+Consistency +Partiotion tolerance -Availability

● MongoDB● Hbase● memcache/memcached● berkleydb

Page 42: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

MongoDB● Написана на C++, BSON● Key-value● github, sourceforge, bit.ly, disqus

Page 43: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Hbase● Написана на Java, REST● column-oriented

Page 44: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

memcache/memcached● Написаны на С, Простой протокол● Key-value● используется везде

Page 45: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

berkleydb● Написана на С, C-API● Key-value● стоит денег

Page 46: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

MongoDB vs Hbase bs memcached vs berkleydb

● кеш memcached● hbase как замена bigtable● встраиваемая berkleydb

Page 47: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

CAP Solution● Жертвуем Consistency● Разбиваем систему на части● Система в разные моменты

времени находиться в разных позициях CAP теоремы

Page 48: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Счастья нет● У каждой задачи свои требования

● У каждого хранилища свои сильные и слабые стороны

● Хранилище под задачу, а не задачу под хранилище

● Одного хранилища мало

● Правильное решение - всегда компромис

Page 49: Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)

Any question?

Oleg [email protected]

http://percona.com/

Kirill A. [email protected]

http://www.roox.ru/