Олег Царев, Кирилл Коринский Сравнительный анализ...

59
Сравнительный анализ хранилищ данных Коринский и Царев... Плоды многолетних размышлений v. 1.0 @ #ADD 2010

description

 

Transcript of Олег Царев, Кирилл Коринский Сравнительный анализ...

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

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

Коринский и Царев...Плоды многолетних размышленийv. 1.0 @ #ADD 2010

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

Введение

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

Содержание

● Постановка проблемы● Что такое распределенные

хранилища● Обзор доступных хранилищ

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

Друзья в социальной сети

Задача: получить список друзей.

● Facebook - 500M пользователей - 5M rps● ВКонтакте - 100M пользователей - 1M rps● Мой Мир - 50M пользователей - 0.5M rps● Toy net - 10 пользователей - <1 rps

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

Матрица смежности

таблица:– оси таблицы – пользователи;

– ячейки таблицы – связь.

● ВКонтактe/Facebook: один бит● Мой Мир: шесть байт● Toy net: один бит

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

Список смежных вершин

каждый элемент:● пара (UID, UID), UID – 4 байта):

– Facebook

– Вконтакте

– Toy net

● кортеж (UID, UID, Info – 6 байт):– Мой Мир

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

Генерация списка друзей

каждый элемент:● Facebook/ВКонтакте - 8 байт.● Мой Мир - 14 байт.● Toy net - 1 байт?

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

Генерация списка друзей

Матрица смежности:● Сканируем строку таблицы● Проверяем каждый столбец строки● Каждая ячейка сообщает отношения

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

Генерация списка друзей (просто)

Список смежных вершин:● Каждый элемент - (Кто?, С кем?, Что?)● Фильтруем список по "Кто?"● Усеченный список содержит всех

друзей

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

Генерация списка друзей (сложно)

Список смежных вершин:● Каждый элемент - (Кто?, С кем?, Что?,

Следующий)● Находим первый элемент с нужным Кто?● Вытягиваем весь список

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

Масштабы: memory

Матрица смежности:● Facebook: 28421 Петабайт● ВКонтакте: 1136 Петабайт● Мой Мир: 13642 Петабайт● Toy net: 16 байт

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

Масштабы: memory

Список смежных вершин (сложно):● Facebook: 69 Гигабайт● ВКонтакте: 14 Гигабайт● Мой мир: 97 гигабайт● Toy net: 200 байт

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

Масштабы: latency

DDR3 ECC2 (DDR3-1066E):● 8 гигабит в секунду максимум● 8 гигабайт - $1500-2000● Страница памяти - 4 килобайта● 2 миллиона страниц в секунду

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

Масштабы: latency

Матрица смежности:● Facebook: 16 rps● ВКонтакте: 80 rps● Мой мир: 40 rps● Toy net: 2 000 000 rps

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

Масштабы: latency

Список смежных вершин (сложно):● 150 друзей у каждого в среднем● 150 страниц на генерацию списка● Итог: 14 000 rps

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

Масштабы: memory/latency

Список смежных вершин (просто)● Нет смысла рассматривать, full scan

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

Оптимизация матрици смежности

● Матрица смежности сильно разряжена● Можно производить адаптивную

упаковку● Реализация станет сложней

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

Оптимизация списка смежных вершин

● Список смежных вершин можно группировать по "Кто?"

● Возрастёт потребление памяти

● Реализация станет сложней

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

Видео: постановка задачи

● Существуют различные кодеки● Разные характеристики:

– Размер ролика

– Потребляемая при конвертации память

– Количество вычислений при конвертации

– Качество записи

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

Видео: решение

● Несжатое видео● H.264

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

Видео: "Экстремумы"

● CPU-limited: H.264 требует много вычислений.

● Memory-limited: Несжатое видео требует много памяти для хранения

● Latency-limited: Несжатое видео требует много памяти для хранения

● Latency-limited: H.264 требуети время на конвертацию

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

Видео: выводы

● В задаче с видео тоже есть "экстремумы"

● Каждый их решений имеет свои минусы

● Три точки экстремума: CPU, Memory, Latency.

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

Основные оси

● CPU● Memory● Latency● Сложность

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

Производные оси

● Бюджет проекта● Сроки● Опыт разработчиков● Аппаратура● Имеющиеся инструменты

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

Выводы

● Основная задача HighLoad - поиск локального оптимума.

● Иногда задача не разрешима в имеющихся условиях

● Наша цель - познакомить слушателей с ключевыми факторами

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

Виды партицирования

● Функциональная декомпозиция● Горизонтальное партицирование● Вертикальное партицирование

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

Manual partitioning

● Разделяем данные на уровне приложения

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

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

Automatic partitioning

● Тяжело поддержать на уровне хранилища

● Приходится указывать критерии партицирования

● Универсальные критерии не работают

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

Иные аспекты партицирования

● На каждом узле выбирается:– Аппаратура

– Хранилище

– Операционная система

● В случае HDD хранилища: файловая система

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

Репликация

● Master-Master: все узлы равноправны● Master-Slave: главные и ведомые узлы

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

offline транзакции

Для клиента транзакция завершается после исполнения на текущем узлетекущем узле.

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

online транзакции

Для клиента транзакция завершается после исполнения на всех узлахвсех узлах.

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

Consistency

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

● Не может быть так, что после записи данные потерялись.

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

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

Availability

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

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

Partition tolerance

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

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

Пример: +A +C -P

● Обычная СУБД

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

Пример: + С + P - A

● Система с online транзакции

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

Пример: +A +P -C

● Система с offline транзакциями

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

Проблема CAP теоремы

● Только два из трех

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

CAP Solution

● Жертвуем Consistency● Разбиваем систему на части● CAP теорема работает в каждый

момент времени

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

Interface: access

● Library: клиентская библиотека● ODBC: стандартный интерфейс

доступа● Embedded: встраиваемая база● Telnet: простой сетевой протокол

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

Interface: method

● API: интерфейс доступа● DSL: domain-speicific-language● SQL (суть DSL): structured query

language

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

Interface: abstraction level

● Search: поиск и выборка значений по ключу

● Query (Search included): поиск, выборка и обработка значений

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

Interface: реализации

● PostgreSQL: lib/ODBC, SQL, Query● MySQL: lib/ODBC, SQL, Query● MySQL NDB-cluster: lib, SQL, Query● Oracle: lib/ODBC, SQL, Query● Oracle Timesten: ODBC, SQL, Query● Riak: lib, API/DSL, Query● MongoDB: lib, API/DSL, Query

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

Interface: реализации

● Hadoop: lib, API, Query● Mnesia: embedded, DSL, Query● memcached: telnet, DSL, Search● memcachedb: telnet, DSL, Search● berkleydb: embedded, API, Search● voldemort: lib, API/DSL, Query● cassandra: lib, API/DSL, Search

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

Storage

● RAM: все данные находятся в оперативной памяти

● Filesystem: система использует для хранения файлы

● Raw partition: система использует раздел диска

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

Storage: реализации

● PostgreSQL: FS, RAM● MySQL: FS, RAM● MySQL NDB-cluster: RAM● Oracle: Raw, FS, RAM● Oracle Timesten: RAM● Riak: FS, RAM● MongoDB: FS

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

Storage: реализации

● Hadoop: FS● Mnesia: FS, RAM● memcached: RAM● memcachedb: FS● berkleydb: FS, RAM● Voldemort: FS, RAM● Cassandra: FS

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

Persistent

● Полная (full): данные гарантированно не теряются

● Частичная (partial): может потеряться последние несколько транзакций

● Отсутствует (loose): данные не сохраняться вообще

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

Persistent: реализации

● PostgreSQL: full● MySQL: full, partial● MySQL NDB-cluster: partial, loose● Oracle: full, partial, loose● Oracle Timesten: partial, loose● Riak: full, loose● MongoDB: full

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

Persistent: реализации

● Hadoop: full● Mnesia: full, loose● memcached: loose● memcachedb: full● berkleydb: full, partial● Voldemort: full, loose● Cassandra: full

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

Динамическая типизация

● Гетерогенный доступ● Единообразный доступ

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

Статическая типизация

● Целостность данных● Высокая производительность● Экономия памяти

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

Реализации

● PostgreSQL: Статическая● MySQL: Статическая● MySQL NDB-cluster: Статическая● Oracle: Статическая● Oracle Timesten: Статическая● Riak: Динамическая

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

Реализации

● MongoDB: Динамическая● Hadoop: Динамическая● Mnesia: Динамическая● memcached: Динамическая● memcachedb: Динамическая● berkleydb: Динамическая● Voldemort: Динамическая● Cassandra: Динамическая

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

Cost/license

● PostgreSQL: BSD-like● MySQL: GPL 2.0/just call● MySQL NDB-cluster: GPL 2.0/just call● Oracle: $47,500● Oracle Timesten: $41,500● Riak: Apache 2.0● MongoDB: AGPL 3.0

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

Cost/license

● Hadoop: Apache 2.0● Mnesia: Erlang Public License● memcached: BSD● memcachedb: BSD● berkleydb: Sleepycat License/$9,800● Voldemort: Apache 2.0● Cassandra: Apache 2.0

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

Счастья нет

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

слабые стороны● Хранилище под задачу, а не задачу

под хранилище● Одного хранилища мало● Правильное решение всегда

компромис

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

Any question?

Oleg [email protected]

http://percona.com/

Kirill A. [email protected]

http://www.roox.ru/