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

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

Dec 14, 2014

Download

Technology

Siel01

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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/