В данном занятии курса “Otus PHP Professional“ мы рассмотрим самые популярные БД для работы с BigData и поиском — ClickHouse и ElasticSearch.

Цели занятия

  • после занятия вы сможете:

  • посмотреть на рынок хранилищ.

Краткое содержание

  • колоночные БД (ClickHouse);

  • другие SQL-решения;

  • not only SQL-решения на примере ElasticSearch.

Результаты

  • разворачивать и применять «нестандартные» хранилища.

Преподаватель

  • Олег Мельник

/**/


База данных ClickHouse

Пример решения задачи

(звезда) пишем свой Delivery Club:

Выбор СУБД

Варианты БД:

  • Postgres

  • Mysql

  • Mongodb

Что будем хранить?

(warning) Первая проблема: от огромных объемов аналитики (допустим, про 100.000 заказов в день, БД ляжет); примеры расчет RPS:

т.е. 600 млн. риквестов в год! для метрик это 100.000 записей в секунду

Примеры метрик:

OLAP

(плюс) Решение: OLAP: Online Analytical Processing / специально для бора аналитики по BigData

(warning) Альтернатива: столбцовые СУБД (ElasticSearch, ClickHouse)

Разница между строковыми и столбовыми

Популярные столбцовые СУБД:

(звезда) В Яндекс Метрике хранилось ~20 трлн. записей (сейчас — более 50); объем сжатых данных ~3 Пб

Почему же нельзя использовать ClickHouse везде?

Теорема CAP

Классификация БД по принципу CAP

(звезда) Здесь RDBMS ~ Postgres, Mysql, …

(вопрос) Что если нужно все 3 свойства вместе ? — Интегрируем вместе ClickHouse & RDBMS

Например, можно из локального ClickHouse работать с удаленной СУБД, например: https://clickhouse.com/docs/ru/interfaces/mysql/

(warning) См. доки https://clickhouse.com/docs/ru/getting-started/ и песочницу: https://gh-api.clickhouse.com/play?user=play#U0VMRUNUIHRvd24sIGRpc3RyaWN0LCBjb3VudCgpIEFTIGMsIHJvdW5kKGF2ZyhwcmljZSkpIEFTIHByaWNlLCBiYXIocHJpY2UsIDAsIDUwMDAwMDAsIDEwMCkgRlJPTSB1a19wcmljZV9wYWlkIFdIRVJFIGRhdGUgPj0gJzIwMjAtMDEtMDEnIEdST1VQIEJZIHRvd24sIGRpc3RyaWN0IEhBVklORyBjID49IDEwMCBPUkRFUiBCWSBwcmljZSBERVNDIExJTUlUIDEwMA==

Минусы ClickHouse

(warning) Допустимые операции в 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

(warning) Супер удобный встроенный инструмент — “Elastic Dashboard” / Kibana : http://localhost:5601/app/

(звезда) Elastic в т.ч. удобен для мониторинга: чтения логов (часто используется среди devops)

Мой комментарий к вебинару:

Лекция понятная, спс.

В исходниках проекта не хватает файла readme.md с описание, как поднять проект (в т.ч. инструкция по докеру).

Это нужно, чтобы быстро все запустить и посмотреть как все работает («поиграться»).

Сегодня было трудно: понять, как запустить все исходники из примера выше.

Меня удивило: как круто можно ускорить поиск

Я понял: что пора использовать эти 2 инструмента для описка на своих сайтах.


Доп. материалы


Домашнее задание

(warning) Задание на работу с ElasticSearch

Цель:

  • Научиться создавать приложение для анализа каналов на Youtube. Закрепить навыки работы с БД на уровне логики.

Описание/Пошаговая инструкция выполнения домашнего задания:

Создать приложение для анализа каналов на Youtube (не обязательно на фреймворке):

1.1. Создать структуру/структуры хранения информации о канале и видео канала в ElasticSearch, описать в виде JSON с указанием типов полей. Описать, какие индексы понадобятся в данной структуре?

1.2. Создать необходимые модели для добавления и удаления данных из коллекций

1.3. Реализовать класс статистики, который может возвращать:

  • Суммарное кол-во лайков и дизлайков для канала по всем его видео

  • Топ N каналов с лучшим соотношением кол-во лайков/кол-во дизлайков

1.4*. Можно создать паука, который будет ходить по Youtube и наполнять базу данными

Критерии оценки:

  1. Работа c ES при помощи готовых библиотек

  2. Выделен слой кода, отвечающий за работу с хранилищем

Рекомендуем сдать до: 20.03.2022


Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.