В данном занятии курса “Otus PHP Professional“ мы рассмотрим самые популярные БД для работы с BigData и поиском — ClickHouse и ElasticSearch.
Цели занятия
-
после занятия вы сможете:
-
посмотреть на рынок хранилищ.
Краткое содержание
-
колоночные БД (ClickHouse);
-
другие SQL-решения;
-
not only SQL-решения на примере ElasticSearch.
Результаты
-
разворачивать и применять «нестандартные» хранилища.
Преподаватель
-
Олег Мельник
/**/
База данных ClickHouse
Пример решения задачи
пишем свой Delivery Club:
Выбор СУБД
Варианты БД:
-
Postgres
-
Mysql
-
Mongodb
Что будем хранить?
Первая проблема: от огромных объемов аналитики (допустим, про 100.000 заказов в день, БД ляжет); примеры расчет RPS:
т.е. 600 млн. риквестов в год! для метрик это 100.000 записей в секунду
Примеры метрик:
OLAP
Решение: OLAP: Online Analytical Processing / специально для бора аналитики по BigData
Альтернатива: столбцовые СУБД (ElasticSearch, ClickHouse)
Разница между строковыми и столбовыми
Популярные столбцовые СУБД:
В Яндекс Метрике хранилось ~20 трлн. записей (сейчас — более 50); объем сжатых данных ~3 Пб
Почему же нельзя использовать ClickHouse везде?
Теорема CAP
Классификация БД по принципу CAP
Здесь RDBMS ~ Postgres, Mysql, …
Что если нужно все 3 свойства вместе ? — Интегрируем вместе ClickHouse & RDBMS
Например, можно из локального ClickHouse работать с удаленной СУБД, например: https://clickhouse.com/docs/ru/interfaces/mysql/
См. доки https://clickhouse.com/docs/ru/getting-started/ и песочницу: https://gh-api.clickhouse.com/play?user=play#U0VMRUNUIHRvd24sIGRpc3RyaWN0LCBjb3VudCgpIEFTIGMsIHJvdW5kKGF2ZyhwcmljZSkpIEFTIHByaWNlLCBiYXIocHJpY2UsIDAsIDUwMDAwMDAsIDEwMCkgRlJPTSB1a19wcmljZV9wYWlkIFdIRVJFIGRhdGUgPj0gJzIwMjAtMDEtMDEnIEdST1VQIEJZIHRvd24sIGRpc3RyaWN0IEhBVklORyBjID49IDEwMCBPUkRFUiBCWSBwcmljZSBERVNDIExJTUlUIDEwMA==
Минусы ClickHouse
Допустимые операции в ClickHouse — только INSERT/SELECT (без UPDATE/DELETE)
База данных ElasticSearch
Пример новой задачи
Классический подход:
Краткие шаги:
Сетап проекта
В консоли: (в контейнере Докер):
docker-conpose exec workspace bash su laradock # (!) use key -a to create fabris, seeds, migrations php artisan ake:model Article -a
Пишем код
-
Миграции:
-
Фабрика:
-
Сид ArticleSeader — для заполнения фейковыми данными
-
DatabaseSeeder.php : вызов миграций / сида:
-
ArticleService.php
-
EloquentArticleRepostitory.php
-
Роутинг: web.php
Написали, тестируем:
Но допустим, нам нужны доработки для умного поиска (для чего нам и понадобится Эластик):
Нам пригодится Nosql:
Основные понятия: Документы, Индексы, Типы
Пример запроса к Elaqstic:
Пример запуска: (локально)
Jcy/ ltqcndbz
-
Пример: Индексация
-
Пример: Удаление
-
Пример: Поиск:
Добавляем Elastic в наш проект
Методы для обновления индексов эластика:
Поиск по Эластику:
Индексация:
Гибкое переключение с эластика на встроенный поиск:
Kibana
Супер удобный встроенный инструмент — “Elastic Dashboard” / Kibana :
http://localhost:5601/app/
Elastic в т.ч. удобен для мониторинга: чтения логов (часто используется среди devops)
Мой комментарий к вебинару:
Лекция понятная, спс.
В исходниках проекта не хватает файла readme.md с описание, как поднять проект (в т.ч. инструкция по докеру).
Это нужно, чтобы быстро все запустить и посмотреть как все работает («поиграться»).
Сегодня было трудно: понять, как запустить все исходники из примера выше.
Меня удивило: как круто можно ускорить поиск
Я понял: что пора использовать эти 2 инструмента для описка на своих сайтах.
Доп. материалы
-
Вся документация по ClickHouse: https://clickhouse.com/docs/ru/
-
Запись вебинара: https://play.boomstream.com/vGZZFLXD
-
Free GRAPHICAL WEB INTERFACE FOR CLICKHOUSE : Tabix online tool: http://ui.tabix.io/#!/login
-
Подкаст выходного дня Импровизации на темы высоких технологий Разговоры на темы хайтек, высоких компьютерных технологий, гаджетов, облаков, программирования и прочего интересного из мира ИТ. https://radio-t.com
-
Тестовые массивы данных для ClickHouse | OnTime | Этот датасет может быть получен двумя способами: импорт из сырых данных; скачивание готовых партиций. https://clickhouse.com/docs/ru/getting-started/example-datasets/ontime/
-
PHP ClickHouse Client https://packagist.org/packages/smi2/phpclickhouse
-
MongoDB client: Robo 3T is now Studio 3T Free https://robomongo.org
-
Исходники описанного выше проекта на Laravel: https://github.com/yehorherasymchuk/otus-php-elasticsearch , Laravel docker configs: https://github.com/yehorherasymchuk/docker-laravel
-
Изучаем ELK. Часть I — Установка Elasticsearch https://habr.com/ru/post/538840/
-
Изучаем ELK. Часть II — Установка Kibana и Logstash https://habr.com/ru/post/538974/
-
Это фрагменты урока из курса, полная версия которого доступна на официальном сайте Отус.
Домашнее задание
Задание на работу с ElasticSearch
Цель:
-
Научиться создавать приложение для анализа каналов на Youtube. Закрепить навыки работы с БД на уровне логики.
Описание/Пошаговая инструкция выполнения домашнего задания:
Создать приложение для анализа каналов на Youtube (не обязательно на фреймворке):
1.1. Создать структуру/структуры хранения информации о канале и видео канала в ElasticSearch, описать в виде JSON с указанием типов полей. Описать, какие индексы понадобятся в данной структуре?
1.2. Создать необходимые модели для добавления и удаления данных из коллекций
1.3. Реализовать класс статистики, который может возвращать:
-
Суммарное кол-во лайков и дизлайков для канала по всем его видео
-
Топ N каналов с лучшим соотношением кол-во лайков/кол-во дизлайков
1.4*. Можно создать паука, который будет ходить по Youtube и наполнять базу данными
Критерии оценки:
-
Работа c ES при помощи готовых библиотек
-
Выделен слой кода, отвечающий за работу с хранилищем
Рекомендуем сдать до: 20.03.2022
Нет комментариев