Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ускорение веб-аналитики с использованием column-oriented СУБД Иван Авсеянко
Возраст Пол Местоположение Статистика хитов Много чего ещё...
SQL * *rulez
Какую СУБД выбрать? <ul><li>MySQL; </li></ul><ul><li>PostgreSQL; </li></ul><ul><li>Oracle; </li></ul><ul><li>MS SQL </li><...
Больше хитов – больше данных
Больше данных – больше проблем <ul><li>Для примера –  www.rambler.ru </li></ul><ul><li>14 000 000 просмотров; </li></ul><u...
Проблемы “традиционных” СУБД <ul><li>Запросы заранее неизвестны </li></ul><ul><li>Даже индексы могут не уместиться в RAM <...
OLTP
Иван Иванов 1 курс Факультет биологии Группа 123 Петр Петров 1 курс Факультет биологии Группа 132 Сидор Сидоров 1 курс Фак...
Храним данные строками
Храним данные столбцами
Преимущества колонок <ul><li>Каждую колонку можно отсортировать по-своему </li></ul><ul><li>“ Традиционные” индексы не нуж...
<ul><li>Колонка – массив однородных данных </li></ul>
Сжатые данные лучше, чем несжатые <ul><li>Уменьшение объёма данных </li></ul><ul><li>Значительное ускорение работы СУБД; <...
Реализации
Open source and free! <ul><li>Infobright (CE) </li></ul><ul><li>InfiniDB (CE) </li></ul><ul><li>MonetDB </li></ul><ul><li>...
Infobright - плюсы <ul><li>Лучшее сжатие на рынке </li></ul><ul><li>Неплохая скорость загрузки данных в БД </li></ul><ul><...
Infobright - минусы <ul><li>Реализовано не очень большое подмножество языка SQL (хотя есть медленный MySQL optimizer) </li...
InfiniDB - плюсы <ul><li>Многопоточная загрузка данных </li></ul><ul><li>Многопоточное выполнение запросов </li></ul><ul><...
InfiniDB - минусы <ul><li>Гигантский размер БД (сжатие доступно только в EE) </li></ul><ul><li>Небыстрая загрузка данных (...
Monet DB - плюсы <ul><li>Довольно полная реализация SQL, включая INSERT, UPDATE, DELETE </li></ul><ul><li>Есть сжатие данн...
Monet DB - минусы <ul><li>Слабое сжатие данных </li></ul><ul><li>Относительно медленная загрузка данных </li></ul>
Тестовый набор данных <ul><li>~327,5 миллионов строк </li></ul><ul><li>23 колонки </li></ul><ul><li>~63 GB </li></ul><ul><...
Тестовая конфигурация <ul><li>CPU: Intel Core 2 Duo E6550 @ 2.33GHz </li></ul><ul><li>RAM: 8GB </li></ul><ul><li>HDD: 1Tb ...
Версии ПО <ul><li>Infobright CE 4.0.4 x86_64 </li></ul><ul><li>InfiniDB CE 2.2.2 x86_64 </li></ul><ul><li>MonetDB 11.5.3 x...
Загрузка данных
MySQL/MyISAM <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Время загрузки – 92  минуты 26 секунд ...
Infobright CE <ul><li>LOAD DATA LOCAL INFILE 'filename' INTO TABLE test </li></ul><ul><li>Время загрузки – 216 минут </li>...
MonetDB <ul><li>COPY INTO test FROM 'file.log' DELIMITERS 't' LOCKED; </li></ul><ul><li>Время загрузки – 643 минуты </li><...
InfiniDB <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Время загрузки – > 24 часов  </li></ul><ul...
MySQL/InnoDB <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Со сжатием (Barracuda)! </li></ul><ul>...
Выборки
SELECT COUNT(*) FROM test;
<ul><li>MySQL/MyISAM – 0,03  секунды </li></ul><ul><li>Infobright CE – 0,6 секунды </li></ul><ul><li>MonetDB –  4 ,2  секу...
SELECT country, state, SUM(imps) AS impressions, SUM(clicks) AS clicks FROM test WHERE is_fraud < 1 GROUP BY country, stat...
<ul><li>Infobright CE – 7 минут 44 секунды </li></ul><ul><li>MySQL/MyISAM – 13  минут 31 секунда </li></ul><ul><li>MonetDB...
Другие результаты <ul><li>http://www.mysqlperformanceblog.com/2009/10/02/analyzing-air-traffic-performance-with-infobright...
Как сделать выбор? <ul><li>Не используйте колоночные СУБД, если ваши данные часто обновляются. </li></ul><ul><li>Не исполь...
Оптимизации  IB <ul><li>Данные колонок хранятся блоками по  65535  записей  (DataPack) , сжатие зависит не только от типа ...
Оптимизации  IB <ul><li>Для каждого  DataPack  хранятся метаданные, такие как результат выполнения функций  MAX(), MIN(), ...
Оптимизации  IB <ul><li>Планировщик запросов использует метаданные для определения «нужных», «ненужных» и «подозрительных»...
Советы по оптимизации IB <ul><li>ServerMainHeapSize = 1/2 – 2/3 доступной RAM </li></ul><ul><li>LoaderHeapSize = не меньше...
Спасибо за внимание
Upcoming SlideShare
Loading in …5
×

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

1,765 views

Published on

  • Be the first to comment

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

  1. 1. Ускорение веб-аналитики с использованием column-oriented СУБД Иван Авсеянко
  2. 2. Возраст Пол Местоположение Статистика хитов Много чего ещё...
  3. 3. SQL * *rulez
  4. 4. Какую СУБД выбрать? <ul><li>MySQL; </li></ul><ul><li>PostgreSQL; </li></ul><ul><li>Oracle; </li></ul><ul><li>MS SQL </li></ul><ul><li>... </li></ul>
  5. 5. Больше хитов – больше данных
  6. 6. Больше данных – больше проблем <ul><li>Для примера – www.rambler.ru </li></ul><ul><li>14 000 000 просмотров; </li></ul><ul><li>200 байт на хит; </li></ul><ul><li>2,6 ГБ логов в день; </li></ul>
  7. 7. Проблемы “традиционных” СУБД <ul><li>Запросы заранее неизвестны </li></ul><ul><li>Даже индексы могут не уместиться в RAM </li></ul><ul><li>Данные загружаются слишком медленно </li></ul>
  8. 8. OLTP
  9. 9. Иван Иванов 1 курс Факультет биологии Группа 123 Петр Петров 1 курс Факультет биологии Группа 132 Сидор Сидоров 1 курс Факультет экономики Группа 190
  10. 10. Храним данные строками
  11. 11. Храним данные столбцами
  12. 12. Преимущества колонок <ul><li>Каждую колонку можно отсортировать по-своему </li></ul><ul><li>“ Традиционные” индексы не нужны </li></ul><ul><li>Меньше операций seek при обработке многих строк </li></ul><ul><li>Есть возможность эффективно сжимать данные </li></ul>
  13. 13. <ul><li>Колонка – массив однородных данных </li></ul>
  14. 14. Сжатые данные лучше, чем несжатые <ul><li>Уменьшение объёма данных </li></ul><ul><li>Значительное ускорение работы СУБД; </li></ul><ul><li>Для каждой колонки можно выбрать наиболее подходящий алгоритм сжатия </li></ul>
  15. 15. Реализации
  16. 16. Open source and free! <ul><li>Infobright (CE) </li></ul><ul><li>InfiniDB (CE) </li></ul><ul><li>MonetDB </li></ul><ul><li>LucidDB </li></ul><ul><li>...; </li></ul><ul><li>C-Store (2006) </li></ul><ul><li>Infobright (EE) </li></ul><ul><li>InfiniDB (EE) </li></ul><ul><li>Oracle </li></ul><ul><li>...; </li></ul>
  17. 17. Infobright - плюсы <ul><li>Лучшее сжатие на рынке </li></ul><ul><li>Неплохая скорость загрузки данных в БД </li></ul><ul><li>Хорошая скорость выполнения сложных запросов </li></ul>
  18. 18. Infobright - минусы <ul><li>Реализовано не очень большое подмножество языка SQL (хотя есть медленный MySQL optimizer) </li></ul><ul><li>Однопоточный загрузчик данных </li></ul><ul><li>Однопоточное выполнение запроса </li></ul><ul><li>Баги </li></ul>
  19. 19. InfiniDB - плюсы <ul><li>Многопоточная загрузка данных </li></ul><ul><li>Многопоточное выполнение запросов </li></ul><ul><li>Довольно полная реализация SQL, с возможностью выполнения DELETE, INSERT, UPDATE </li></ul><ul><li>Поддержка транзакций (MVCC) </li></ul>
  20. 20. InfiniDB - минусы <ul><li>Гигантский размер БД (сжатие доступно только в EE) </li></ul><ul><li>Небыстрая загрузка данных (из-за отсутствия компрессии) </li></ul>
  21. 21. Monet DB - плюсы <ul><li>Довольно полная реализация SQL, включая INSERT, UPDATE, DELETE </li></ul><ul><li>Есть сжатие данных </li></ul><ul><li>Поддержка транзакций (OCC) </li></ul><ul><li>Подержка Xquery и других интерфейсов к БД </li></ul>
  22. 22. Monet DB - минусы <ul><li>Слабое сжатие данных </li></ul><ul><li>Относительно медленная загрузка данных </li></ul>
  23. 23. Тестовый набор данных <ul><li>~327,5 миллионов строк </li></ul><ul><li>23 колонки </li></ul><ul><li>~63 GB </li></ul><ul><li>29 каталогов, 2814 файлов </li></ul>
  24. 24. Тестовая конфигурация <ul><li>CPU: Intel Core 2 Duo E6550 @ 2.33GHz </li></ul><ul><li>RAM: 8GB </li></ul><ul><li>HDD: 1Tb SATA, 32Mb cache, 7200RPM </li></ul><ul><li>OS: Fedora 15, Linux kernel 2.6.40.4-5.fc15.x86_64 </li></ul>
  25. 25. Версии ПО <ul><li>Infobright CE 4.0.4 x86_64 </li></ul><ul><li>InfiniDB CE 2.2.2 x86_64 </li></ul><ul><li>MonetDB 11.5.3 x86_64 </li></ul><ul><li>MySQL 5.5.14 x86_64 </li></ul>
  26. 26. Загрузка данных
  27. 27. MySQL/MyISAM <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Время загрузки – 92 минуты 26 секунд </li></ul><ul><li>Размер данных – 63 Gb </li></ul>
  28. 28. Infobright CE <ul><li>LOAD DATA LOCAL INFILE 'filename' INTO TABLE test </li></ul><ul><li>Время загрузки – 216 минут </li></ul><ul><li>Размер данных – 8,5 Gb </li></ul>
  29. 29. MonetDB <ul><li>COPY INTO test FROM 'file.log' DELIMITERS 't' LOCKED; </li></ul><ul><li>Время загрузки – 643 минуты </li></ul><ul><li>Размер данных – 63 Gb </li></ul>
  30. 30. InfiniDB <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Время загрузки – > 24 часов </li></ul><ul><li>Размер данных – > 63 Gb </li></ul>
  31. 31. MySQL/InnoDB <ul><li>LOAD DATA LOCAL INFILE '$i' INTO TABLE test; </li></ul><ul><li>Со сжатием (Barracuda)! </li></ul><ul><li>Время загрузки – 2,5 суток </li></ul><ul><li>Размер данных – 36 Gb </li></ul>
  32. 32. Выборки
  33. 33. SELECT COUNT(*) FROM test;
  34. 34. <ul><li>MySQL/MyISAM – 0,03 секунды </li></ul><ul><li>Infobright CE – 0,6 секунды </li></ul><ul><li>MonetDB – 4 ,2 секунды </li></ul><ul><li>MySQL/InnoDB – 2 8 минут </li></ul>
  35. 35. 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;
  36. 36. <ul><li>Infobright CE – 7 минут 44 секунды </li></ul><ul><li>MySQL/MyISAM – 13 минут 31 секунда </li></ul><ul><li>MonetDB – 32 минуты 11 секунд </li></ul><ul><li>MySQL/InnoDB – 72 минуты 4 секунды </li></ul>
  37. 37. Другие результаты <ul><li>http://www.mysqlperformanceblog.com/2009/10/02/analyzing-air-traffic-performance-with-infobright-and-monetdb/ </li></ul><ul><li>http://www.mysqlperformanceblog.com/2010/01/07/star-schema-bechmark-infobright-infinidb-and-luciddb/ </li></ul>
  38. 38. Как сделать выбор? <ul><li>Не используйте колоночные СУБД, если ваши данные часто обновляются. </li></ul><ul><li>Не используйте колоночные СУБД, если вам не нужны сложные и непредсказуемые выборки. </li></ul>
  39. 39. Оптимизации IB <ul><li>Данные колонок хранятся блоками по 65535 записей (DataPack) , сжатие зависит не только от типа колонки, но и от содержимого блока; </li></ul>
  40. 40. Оптимизации IB <ul><li>Для каждого DataPack хранятся метаданные, такие как результат выполнения функций MAX(), MIN(), SUM(), AVG() для значений блока </li></ul>
  41. 41. Оптимизации IB <ul><li>Планировщик запросов использует метаданные для определения «нужных», «ненужных» и «подозрительных» блоков. Данные, которые не нужны, не читаются с диска и не разжимаются. </li></ul>
  42. 42. Советы по оптимизации IB <ul><li>ServerMainHeapSize = 1/2 – 2/3 доступной RAM </li></ul><ul><li>LoaderHeapSize = не меньше 800 MB, если позволяет память </li></ul><ul><li>DataFolder и CacheFolder лучше быть на разных дисках </li></ul><ul><li>Без крайней необходимости не включайте MySQLQueryOptimizer </li></ul>
  43. 43. Спасибо за внимание

×