Для успешного выполнения ДЗ вам потребуется использовать базы данных Cassandra и Redis. Крайне рекомендуется использовать Docker для поднятия этих баз данных. Инструкцию по установке сможете найти тут: https://docs.docker.com/get-docker/
Команда для старта Redis в докере:
docker run -p 6379:6379 --name some-redis redis
Зайти в консольный клиент Redis в докере:
docker exec -it some-redis redis-cli
Команда для старта Cassandra в докере:
docker run --name some-cassandra -p 9042:9042 -d cassandra
Зайти в консольный клиент Cassandra в докере:
docker exec -it some-cassandra cqlsh
Делаем себе форк этого репозитория, создаем отдельную ветку в этом форке и пишем решение в этой ветке. Готовый результат скидываем как PR в master своего форка из новой ветки и пишем лектору в Mattermost.
В папке cassandra лежит файл schema.sql, представляющий собой схему таблиц, как бы они выглядели в SQL. Необходимо написать запросы для создания таблицы или нескольких таблиц в Cassandra и написать CQL запросы под следующие требования:
-
Запрос, который бы доставал посты заданного пользователя упорядоченные по времени создания поста - сначала новые. Запрос должен возвращать post_id, content, дату создания поста.
-
Запрос, который бы доставал последний пост заданного пользователя. Запрос должен возвращать post_id, content, дату создания поста, username.
-
Запрос, который бы доставал посты заданного пользователя, опубликованные после заданной даты. Запрос должен возвращать post_id, content, дату создания поста.
-
Запрос, который бы доставал пользователей, которые сделали пост в заданный день по заданной теме, упорядоченные по времени - сначала новые. Запрос должен возвращать user_id, username, post_id, время создания поста.
Решение (таблицы и запросы) писать в файле solution.cql
Команды https://redis.io/commands/
- Понять что такое Rate Limiter https://t.ly/TSIwJ
- Придумать алгоритм его работы на Redis
- В папке redis лежит maven проект. В зависимостях подключен Redis. В классе
RateLimier
необходимо используя Redis реализовать методpass()
, который будет возвращатьtrue
, в случае если лимит запросов не превышен и запрос пропускается, а если же рейт превышен и нужно ограничить запрос, возвращаетсяfalse
. В конструкторRateLimier
помимоJedis
(клиент для Redis) прокидыватесяlabel
- название запроса, рейт которого хотим ограничивать;maxRequestCount
- максимальное количество запросов, которые хотим пропускать за временной промежутокtimeWindowSeconds
в секундах. Например если нужно ограничить 60 rps, то можно задатьmaxRequestCount=60
,timeWindowSeconds=1
. Чтобы поиграться со своим Rate Limiter, запускаемmain()
и налягаем наEnter
. Завершить программу можно написавq
. Проверить решение можно запустив тесты (для запуска тестов нужен поднятый redis). ТестslidingWindowTest
- задание со звездочкой (за дополнительный балл). Если не получилось пройти этот тест, его нужно закомментить.