Skip to content

Latest commit

 

History

History
65 lines (50 loc) · 4.79 KB

readme.md

File metadata and controls

65 lines (50 loc) · 4.79 KB

Homework NoSQL

Для успешного выполнения ДЗ вам потребуется использовать базы данных 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.

1. Cassandra

В папке cassandra лежит файл schema.sql, представляющий собой схему таблиц, как бы они выглядели в SQL. Необходимо написать запросы для создания таблицы или нескольких таблиц в Cassandra и написать CQL запросы под следующие требования:

  1. Запрос, который бы доставал посты заданного пользователя упорядоченные по времени создания поста - сначала новые. Запрос должен возвращать post_id, content, дату создания поста.

  2. Запрос, который бы доставал последний пост заданного пользователя. Запрос должен возвращать post_id, content, дату создания поста, username.

  3. Запрос, который бы доставал посты заданного пользователя, опубликованные после заданной даты. Запрос должен возвращать post_id, content, дату создания поста.

  4. Запрос, который бы доставал пользователей, которые сделали пост в заданный день по заданной теме, упорядоченные по времени - сначала новые. Запрос должен возвращать user_id, username, post_id, время создания поста.

Решение (таблицы и запросы) писать в файле solution.cql

2. Redis

Команды https://redis.io/commands/

  1. Понять что такое Rate Limiter https://t.ly/TSIwJ
  2. Придумать алгоритм его работы на Redis
  3. В папке 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 - задание со звездочкой (за дополнительный балл). Если не получилось пройти этот тест, его нужно закомментить.