feat: отчеты по заданиям

parent c73dd67e
# Отчет: Реализация отправки данных о пользователе в ClickHouse с использованием Go
## Введение
В рамках задачи было необходимо реализовать отправку данных о пользователе в ClickHouse с использованием языка программирования Go. В отчете описаны выполненные шаги, включая настройку окружения, создание таблицы в ClickHouse, написание кода на Go и проверку результатов.
## Выполненные действия
### Установка ClickHouse
Для начала работы с ClickHouse была выполнена его установка на сервер. Использовалась команда для Ubuntu/Debian:
```bash
sudo apt-get install clickhouse-server clickhouse-client
```
После установки сервер был запущен, и доступ к нему был проверен с помощью клиента clickhouse-client.
### Создание таблицы в ClickHouse
Для хранения данных о пользователях была создана таблица users с использованием следующего SQL-запроса:
```sql
CREATE TABLE users (
user_id UInt32,
name String,
email String,
registered_at DateTime
) ENGINE = MergeTree()
ORDER BY (user_id);
```
Таблица была успешно создана, и её структура проверена с помощью команды:
```sql
DESCRIBE users;
```
### Установка библиотеки clickhouse-go
Для работы с ClickHouse в Go была установлена библиотека clickhouse-go. Установка выполнена с помощью команды:
```bash
go get github.com/ClickHouse/clickhouse-go/v2
```
### Написание кода на Go
Был написан код на Go для отправки данных о пользователе в ClickHouse. Код включает следующие шаги:
1. Подключение к ClickHouse.
2. Подготовка данных о пользователе.
3. Выполнение SQL-запроса для вставки данных.
Код:
```go
package main
import (
"context"
"database/sql"
"fmt"
"log"
"time"
_ "github.com/ClickHouse/clickhouse-go/v2"
)
func main() {
// Подключение к ClickHouse
connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9000?username=default&password=&database=default")
if err != nil {
log.Fatalf("Ошибка подключения к ClickHouse: %v", err)
}
defer connect.Close()
// Проверка соединения
if err := connect.Ping(); err != nil {
log.Fatalf("Ошибка проверки соединения: %v", err)
}
// Данные о пользователе
userID := uint32(1)
name := "John Doe"
email := "john.doe@example.com"
registeredAt := time.Now()
// SQL-запрос для вставки данных
query := `
INSERT INTO users (user_id, name, email, registered_at)
VALUES (?, ?, ?, ?)
`
// Выполнение запроса
_, err = connect.ExecContext(context.Background(), query, userID, name, email, registeredAt)
if err != nil {
log.Fatalf("Ошибка при выполнении запроса: %v", err)
}
fmt.Println("Данные успешно отправлены в ClickHouse")
}
```
### Проверка данных в ClickHouse
После выполнения кода была выполнена проверка данных в таблице users с помощью SQL-запроса:
```sql
SELECT * FROM users;
```
Результат:
```
┌─user_id─┬─name─────┬─email────────────────┬────registered_at────┐
│ 1 │ John Doe │ john.doe@example.com │ 2025-10-01 12:00:00 │
└─────────┴──────────┴──────────────────────┴─────────────────────┘
```
Данные были успешно добавлены в таблицу.
## Заключение
Задача по реализации отправки данных о пользователе в ClickHouse с использованием Go была успешно выполнена. Были выполнены следующие шаги:
\ No newline at end of file
Целью данного проекта была разработка сервиса для показа баннеров пользователю. Сервис должен быть масштабируемым, производительным и легко интегрируемым в существующую инфраструктуру.
## Анализ требований
1. Перед началом разработки были проанализированы основные требования к сервису:
2. Возможность показа баннеров пользователю на основе его характеристик (например, возраст, пол, интересы).
3. Поддержка различных типов баннеров (статичные, анимированные, видео).
4. Учет статистики показов и кликов для каждого баннера.
5. Возможность управления баннерами через административную панель (добавление, редактирование, удаление).
6. Высокая производительность и низкая задержка при показе баннеров.
7. Масштабируемость для обработки большого количества запросов.
8. Безопасность данных и защита от злоупотреблений.
## Разработка
### API для показа баннеров:
1. Реализован эндпоинт /api/banners, который принимает данные пользователя и возвращает наиболее релевантный баннер.
2. Логика выбора баннера основана на алгоритме машинного обучения (рекомендательная система).
### API для управления баннерами:
1. Эндпоинты для CRUD операций с баннерами (/api/banners/create, /api/banners/update, /api/banners/delete).
2. Валидация данных и проверка прав доступа.
### Статистика:
1. Реализован сбор статистики показов и кликов.
2. Данные хранятся в отдельной таблице базы данных и доступны для анализа через API.
\ No newline at end of file
Реализация чтения сообщений из Kafka и отображения баннера на Go
## Описание задачи
Необходимо реализовать систему, которая читает сообщения из Kafka, содержащие информацию о действиях пользователя, и на основе этих данных показывает соответствующий баннер.
## Выполненные действия:
### Настройка Kafka:
- Установлен и настроен Kafka-брокер.
- Создан топик user_actions для отправки сообщений о действиях пользователя.
- Настроен продюсер для отправки тестовых сообщений в топик.
### Реализация потребителя (Consumer) Kafka на Go:
- Использована библиотека sarama для работы с Kafka в Go.
- Написан потребитель, который подписывается на топик user_actions и читает сообщения в реальном времени.
- Реализована обработка сообщений, содержащих информацию о действиях пользователя (например, user_id, action_type, timestamp).
### Логика отображения баннера:
На основе типа действия (action_type) определяется, какой баннер необходимо показать.
Реализована логика отображения баннера:
- Если действие view_product, показывается баннер с рекомендациями товаров.
- Если действие add_to_cart, показывается баннер с предложением оформить заказ.
- Если действие purchase, показывается баннер с благодарностью за покупку.
## Пример сообщения в Kafka:
```json
{
"user_id": "12345",
"action_type": "add_to_cart",
"timestamp": "2023-10-01T12:34:56Z"
}
```
## Пример отображения баннера:
При получении сообщения с action_type = "add_to_cart", на фронтенде отображается баннер с текстом: "Товар добавлен в корзину! Оформите заказ сейчас и получите скидку 10%!"
## Заключение:
Задача успешно реализована. Система корректно читает сообщения из Kafka, обрабатывает их и отображает соответствующий баннер на основе действий пользователя.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment