![Page 1: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/1.jpg)
Ускорение веб-аналитики с использованием column-
oriented СУБД
Иван Авсеянко
![Page 2: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/2.jpg)
Возраст
Пол
Местоположение
Статистика хитов
Много чего ещё...
![Page 3: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/3.jpg)
SQL*
*rulez
![Page 4: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/4.jpg)
Какую СУБД выбрать?MySQL;PostgreSQL;Oracle;MS SQL...
![Page 5: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/5.jpg)
Больше хитов – больше данных
![Page 6: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/6.jpg)
Больше данных – больше проблемДля примера –
www.rambler.ru• 14 000 000 просмотров;• 200 байт на хит;• 2,6 ГБ логов в день;
![Page 7: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/7.jpg)
Проблемы “традиционных” СУБД
• Запросы заранее неизвестны• Даже индексы могут не уместиться в RAM• Данные загружаются слишком медленно
![Page 8: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/8.jpg)
OLTP
![Page 9: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/9.jpg)
Иван Иванов 1 курс Факультет биологии
Группа 123
Петр Петров 1 курс Факультет биологии
Группа 132
Сидор Сидоров 1 курс Факультет экономики
Группа 190
![Page 10: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/10.jpg)
Храним данные строками
![Page 11: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/11.jpg)
Храним данные столбцами
![Page 12: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/12.jpg)
Преимущества колонок
• Каждую колонку можно отсортировать по-своему• “Традиционные” индексы не нужны• Меньше операций seek при обработке многих
строк• Есть возможность эффективно сжимать данные
![Page 13: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/13.jpg)
Колонка – массив однородных данных
![Page 14: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/14.jpg)
Сжатые данные лучше, чем несжатые
• Уменьшение объёма данных• Значительное ускорение работы СУБД;• Для каждой колонки можно выбрать наиболее
подходящий алгоритм сжатия
![Page 15: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/15.jpg)
Реализации
![Page 16: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/16.jpg)
Open source and free!• Infobright (CE)• InfiniDB (CE)• MonetDB• LucidDB• ...;
C-Store (2006)Infobright (EE)InfiniDB (EE)Oracle...;
![Page 17: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/17.jpg)
Infobright - плюсы• Лучшее сжатие на рынке• Неплохая скорость загрузки данных в БД• Хорошая скорость выполнения сложных
запросов
![Page 18: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/18.jpg)
Infobright - минусы• Реализовано не очень большое подмножество
языка SQL (хотя есть медленный MySQL optimizer)
• Однопоточный загрузчик данных• Однопоточное выполнение запроса• Баги
![Page 19: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/19.jpg)
InfiniDB - плюсы• Многопоточная загрузка данных• Многопоточное выполнение запросов• Довольно полная реализация SQL, с
возможностью выполнения DELETE, INSERT, UPDATE
• Поддержка транзакций (MVCC)
![Page 20: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/20.jpg)
InfiniDB - минусы• Гигантский размер БД (сжатие доступно
только в EE)• Небыстрая загрузка данных (из-за
отсутствия компрессии)
![Page 21: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/21.jpg)
Monet DB - плюсы• Довольно полная реализация SQL, включая
INSERT, UPDATE, DELETE• Есть сжатие данных• Поддержка транзакций (OCC)• Подержка Xquery и других интерфейсов к БД
![Page 22: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/22.jpg)
Monet DB - минусы• Слабое сжатие данных• Относительно медленная загрузка данных
![Page 23: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/23.jpg)
Тестовый набор данных• ~327,5 миллионов строк• 23 колонки• ~63 GB• 29 каталогов, 2814 файлов
![Page 24: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/24.jpg)
Тестовая конфигурация• 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 СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/25.jpg)
Версии ПО• 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 СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/26.jpg)
Загрузка данных
![Page 27: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/27.jpg)
MySQL/MyISAM• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Время загрузки – 92 минуты 26 секунд• Размер данных – 63 Gb
![Page 28: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/28.jpg)
Infobright CE• LOAD DATA LOCAL INFILE 'filename' INTO
TABLE test• Время загрузки – 216 минут• Размер данных – 8,5 Gb
![Page 29: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/29.jpg)
MonetDB• COPY INTO test FROM 'file.log' DELIMITERS '\t'
LOCKED;• Время загрузки – 643 минуты• Размер данных – 63 Gb
![Page 30: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/30.jpg)
InfiniDB• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Время загрузки – > 24 часов • Размер данных – > 63 Gb
![Page 31: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/31.jpg)
MySQL/InnoDB• LOAD DATA LOCAL INFILE '$i' INTO TABLE test;• Со сжатием (Barracuda)!• Время загрузки – 2,5 суток• Размер данных – 36 Gb
![Page 32: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/32.jpg)
Выборки
![Page 33: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/33.jpg)
SELECT COUNT(*) FROM test;
![Page 34: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/34.jpg)
• MySQL/MyISAM – 0,03 секунды• Infobright CE – 0,6 секунды• MonetDB – 4,2 секунды• MySQL/InnoDB – 28 минут
![Page 35: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/35.jpg)
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 СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/36.jpg)
• Infobright CE – 7 минут 44 секунды• MySQL/MyISAM – 13 минут 31 секунда• MonetDB – 32 минуты 11 секунд• MySQL/InnoDB – 72 минуты 4 секунды
![Page 37: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/37.jpg)
Другие результаты• 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 СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/38.jpg)
Как сделать выбор?Не используйте колоночные СУБД, если ваши
данные часто обновляются.Не используйте колоночные СУБД, если вам
не нужны сложные и непредсказуемые выборки.
![Page 39: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/39.jpg)
Оптимизации IB• Данные колонок хранятся блоками по
65535 записей (DataPack), сжатие зависит не только от типа колонки, но и от содержимого блока;
![Page 40: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/40.jpg)
Оптимизации IB• Для каждого DataPack хранятся
метаданные, такие как результат выполнения функций MAX(), MIN(), SUM(), AVG() для значений блока
![Page 41: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/41.jpg)
Оптимизации IB• Планировщик запросов использует
метаданные для определения «нужных», «ненужных» и «подозрительных» блоков. Данные, которые не нужны, не читаются с диска и не разжимаются.
![Page 42: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/42.jpg)
Советы по оптимизации IB• ServerMainHeapSize = 1/2 – 2/3 доступной RAM• LoaderHeapSize = не меньше 800 MB, если
позволяет память• DataFolder и CacheFolder лучше быть на разных
дисках• Без крайней необходимости не включайте
MySQLQueryOptimizer
![Page 43: Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)](https://reader035.vdocuments.pub/reader035/viewer/2022081413/549e741eb4795956208b4709/html5/thumbnails/43.jpg)
Спасибо за внимание