Skip to content

ministr-kaifa/homework-nosql

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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 - задание со звездочкой (за дополнительный балл). Если не получилось пройти этот тест, его нужно закомментить.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%