43
Ускорение веб- аналитики с использованием column- oriented СУБД Иван Авсеянко

Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

  • Upload
    ontico

  • View
    1.393

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Ускорение веб-аналитики с использованием column-

oriented СУБД

Иван Авсеянко

Page 2: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Возраст

Пол

Местоположение

Статистика хитов

Много чего ещё...

Page 3: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

SQL*

*rulez

Page 4: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Какую СУБД выбрать?MySQL;PostgreSQL;Oracle;MS SQL...

Page 5: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Больше хитов – больше данных

Page 6: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Больше данных – больше проблемДля примера –

www.rambler.ru• 14 000 000 просмотров;• 200 байт на хит;• 2,6 ГБ логов в день;

Page 7: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Проблемы “традиционных” СУБД

• Запросы заранее неизвестны• Даже индексы могут не уместиться в RAM• Данные загружаются слишком медленно

Page 8: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

OLTP

Page 9: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Иван Иванов 1 курс Факультет биологии

Группа 123

Петр Петров 1 курс Факультет биологии

Группа 132

Сидор Сидоров 1 курс Факультет экономики

Группа 190

Page 10: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Храним данные строками

Page 11: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Храним данные столбцами

Page 12: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Преимущества колонок

• Каждую колонку можно отсортировать по-своему• “Традиционные” индексы не нужны• Меньше операций seek при обработке многих

строк• Есть возможность эффективно сжимать данные

Page 13: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Колонка – массив однородных данных

Page 14: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Сжатые данные лучше, чем несжатые

• Уменьшение объёма данных• Значительное ускорение работы СУБД;• Для каждой колонки можно выбрать наиболее

подходящий алгоритм сжатия

Page 15: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Реализации

Page 16: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Open source and free!• Infobright (CE)• InfiniDB (CE)• MonetDB• LucidDB• ...;

C-Store (2006)Infobright (EE)InfiniDB (EE)Oracle...;

Page 17: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Infobright - плюсы• Лучшее сжатие на рынке• Неплохая скорость загрузки данных в БД• Хорошая скорость выполнения сложных

запросов

Page 18: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Infobright - минусы• Реализовано не очень большое подмножество

языка SQL (хотя есть медленный MySQL optimizer)

• Однопоточный загрузчик данных• Однопоточное выполнение запроса• Баги

Page 19: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

InfiniDB - плюсы• Многопоточная загрузка данных• Многопоточное выполнение запросов• Довольно полная реализация SQL, с

возможностью выполнения DELETE, INSERT, UPDATE

• Поддержка транзакций (MVCC)

Page 20: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

InfiniDB - минусы• Гигантский размер БД (сжатие доступно

только в EE)• Небыстрая загрузка данных (из-за

отсутствия компрессии)

Page 21: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Monet DB - плюсы• Довольно полная реализация SQL, включая

INSERT, UPDATE, DELETE• Есть сжатие данных• Поддержка транзакций (OCC)• Подержка Xquery и других интерфейсов к БД

Page 22: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Monet DB - минусы• Слабое сжатие данных• Относительно медленная загрузка данных

Page 23: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Тестовый набор данных• ~327,5 миллионов строк• 23 колонки• ~63 GB• 29 каталогов, 2814 файлов

Page 24: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Тестовая конфигурация• CPU: Intel Core 2 Duo E6550 @ 2.33GHz• RAM: 8GB• HDD: 1Tb SATA, 32Mb cache, 7200RPM• OS: Fedora 15, Linux kernel 2.6.40.4-

5.fc15.x86_64

Page 25: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Версии ПО• Infobright CE 4.0.4 x86_64• InfiniDB CE 2.2.2 x86_64• MonetDB 11.5.3 x86_64• MySQL 5.5.14 x86_64

Page 26: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Загрузка данных

Page 27: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

MySQL/MyISAM• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Время загрузки – 92 минуты 26 секунд• Размер данных – 63 Gb

Page 28: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Infobright CE• LOAD DATA LOCAL INFILE 'filename' INTO

TABLE test• Время загрузки – 216 минут• Размер данных – 8,5 Gb

Page 29: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

MonetDB• COPY INTO test FROM 'file.log' DELIMITERS '\t'

LOCKED;• Время загрузки – 643 минуты• Размер данных – 63 Gb

Page 30: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

InfiniDB• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Время загрузки – > 24 часов • Размер данных – > 63 Gb

Page 31: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

MySQL/InnoDB• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Со сжатием (Barracuda)!• Время загрузки – 2,5 суток• Размер данных – 36 Gb

Page 32: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Выборки

Page 33: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

SELECT COUNT(*) FROM test;

Page 34: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

• MySQL/MyISAM – 0,03 секунды• Infobright CE – 0,6 секунды• MonetDB – 4,2 секунды• MySQL/InnoDB – 28 минут

Page 35: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

SELECT country, state, SUM(imps) AS impressions, SUM(clicks) AS clicks FROM test WHERE is_fraud < 1 GROUP BY country, state ORDER BY country, state;

Page 36: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

• Infobright CE – 7 минут 44 секунды• MySQL/MyISAM – 13 минут 31 секунда• MonetDB – 32 минуты 11 секунд• MySQL/InnoDB – 72 минуты 4 секунды

Page 37: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Другие результаты• http://www.mysqlperformanceblog.com/

2009/10/02/analyzing-air-traffic-performance-with-infobright-and-monetdb/

• http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/

Page 38: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Как сделать выбор?Не используйте колоночные СУБД, если ваши

данные часто обновляются.Не используйте колоночные СУБД, если вам

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

Page 39: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Оптимизации IB• Данные колонок хранятся блоками по

65535 записей (DataPack), сжатие зависит не только от типа колонки, но и от содержимого блока;

Page 40: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Оптимизации IB• Для каждого DataPack хранятся

метаданные, такие как результат выполнения функций MAX(), MIN(), SUM(), AVG() для значений блока

Page 41: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Оптимизации IB• Планировщик запросов использует

метаданные для определения «нужных», «ненужных» и «подозрительных» блоков. Данные, которые не нужны, не читаются с диска и не разжимаются.

Page 42: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Советы по оптимизации IB• ServerMainHeapSize = 1/2 – 2/3 доступной RAM• LoaderHeapSize = не меньше 800 MB, если

позволяет память• DataFolder и CacheFolder лучше быть на разных

дисках• Без крайней необходимости не включайте

MySQLQueryOptimizer

Page 43: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)

Спасибо за внимание