Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

В рамках проекта in-memory key-value реализована база данных с HTTP интерфейсом,возможностью персистентного хранения и автоматического удаления устаревших записей.

Типы хранимых данных

Все ключи базы данных - строки. По одному ключу может быть только одно значение одного из типов. Значения базы данных могут быть одним из следующих типов:

  • скалярами
  • словарь
  • массивами

Скаляр

Скаляр - единичное значения типа строка либо целое число.

Пути по работе со скалярами

GET /scalar/get/:key

Возвращает значение по ключу key. Если по ключу нет значения, возвращается ошибка.

POST /scalar/set/:key

Устанавливает значение по ключу key равным value. Если указан дополнительный параметр ex seconds, значение очищается через заданное количество секунд. Значение seconds 0 означает хранение без ограничений по времени.

Словарь

Словарь - структура, хранящая в своих полях скаляры. Поле мапы задается строковым ключем. С помощью словаря можно по определенному ключу нашей базы данных положить не просто одно значение, а набор полей.

Операции по работе со словарями

POST /hash/set/:key/:field

Устанавливает поле словаря field, являющимся значением по ключу key равным value. Если значение указанного ключа (key) является другим типом, возвращается ошибка. Возвращает количество затронутых полей.

GET /hash/get/:key/:field

Возвращает значение поля field словаря по ключу key. Если по ключу key находится другой тип, возвращается ошибка. Если значение поля field не задано или значение по ключу key не задано, возвращается ошибка.

Массив

Массив позволяет по определенному ключу базы данных хранить упорядоченный массив скаляров.

Операции по работе с массивами

POST array/lpush/:key [element ...]

Вставляет элементы слева в список по ключу key. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.

POST array/rpush/:key [element ...]

Вставляет элементы справа в список по ключу key. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.

POST array/raddtoset/:key

Вставляет справа в список по ключу key элементы, которых еще нет в списке. Если элементов несколько, они вставляются так, как будто для каждого из них по порядку была бы вызвана эта команда. Если значения по ключу не существовало, список создается.

GET array/lpop/:key [left, right] или [count]

Удаляет и возвращает элемент слева списка. Параметр count - количество удаляемых элементов, может быть либо единственным числом - тогда это количество элементов с края, либо двумя числами - тогда это индексы первого и последнего удаляемых элементов. Индексы могут быть отрицательными для доступа с конца списка. Если количество удаляемых элементов превышает количество элементов в списке, возвращается доступное количество.

GET array/rpop/:key [left, right] или [count]

Удаляет и возвращает элемент слева списка. Параметр count - количество удаляемых элементов, может быть либо единственным числом - тогда это количество элементов с края, либо двумя числами - тогда это индексы первого и последнего удаляемых элементов. Индексы могут быть отрицательными для доступа с конца списка. Если количество удаляемых элементо превышает количество элементов в списке, возвращается доступное количество.

POST array/lset/:key

Устанавливает значение элемента с индексом index списка по ключу key равным element. Если элемента с этим индексом не существует, возвращается ошибка.

GET array/lget/:key

Получает значение элемента с индексом index из списка по ключу key. Если элемента с этим индексом не существует, возвращается ошибка.

Дополнительные пути

POST /expire/:key

Для любого ключа базы данных можно явно задать время жизни в секундах. После истечения времени жизни ключа все операции по этому ключу должны работать так, как будто этого ключа нет в базе данных. Если по указанному ключу существует значение, возвращает 1, иначе 0.

Сохранение данных

База данных переодически сохраняет свое состояние на диск для восстановления после сбоев. Для сохранения состояния базы данных используется Postgres. При запуске база данных проверяет наличие состояния и восстанавливает данные из него (если файл состояния есть).

Docker-compose

Приложение и его база данных Postgres поднимается c помощью docker-compose.

Дополнительно

Приложение оснащено тестами и бенчмарками.

About

Golang course repository

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages