KV-Storage — это распределённое хранилище данных типа «ключ-значение», предоставляющее высокую надёжность, масштабируемость и удобство работы. Система подходит для сценариев, где требуется надёжное хранение данных, репликация, а также работа с большими объёмами информации.
- Распределённая архитектура: данные равномерно распределяются между узлами системы.
- Сетевая реализация: взаимодействие с хранилищем осуществляется через HTTP API.
- Устойчивость к перезапуску: данные сохраняются между запусками благодаря использованию файловой системы.
- Поддержка больших данных: работа с объёмами данных, не помещающимися в память.
- Репликация данных: резервное копирование для повышения отказоустойчивости.
- Масштабируемость: поддержка нескольких экземпляров хранилища для увеличения пропускной способности.
- Обширное тестирование: система протестирована на различных сценариях использования.
- Эффективность: оптимизированные алгоритмы поиска ключей и хранения данных.
- Клонируйте репозиторий:
git clone https://github.com/wswfws/kv-storage.git
- Установите зависимости:
pip install -r req.txt
- Запустите сервер:
python server.py
- Для тестирования локального клиента выполните:
python client.py
This document describes how to use the Command-Line Interface (CLI) for interacting with the key-value system. The CLI allows you to perform operations such as adding, retrieving, and clearing key-value pairs.
Clears the specified key from the system.
Usage:
python cli_interface.py clear_key <key>Arguments:
<key>: The key to clear.
Example:
python cli_interface.py clear_key my_keyAdds a value to a specified key.
Usage:
python cli_interface.py add_value <key> <value>Arguments:
<key>: The key to which the value should be added.<value>: The value to add.
Example:
python cli_interface.py add_value my_key my_valueAdds a partial value to a specified key. This operation is useful when constructing a value incrementally.
Usage:
python cli_interface.py add_value_part <key> <value>Arguments:
<key>: The key to which the partial value should be added.<value>: The partial value to add.
Example:
python cli_interface.py add_value_part my_key partial_valueRetrieves the value associated with a specified key.
Usage:
python cli_interface.py get_value <key>Arguments:
<key>: The key whose value should be retrieved.
Example:
python cli_interface.py get_value my_keyEnsure you have Python installed on your system and the required dependencies for your module. Import necessary functions from your key-value module.
To run the CLI, execute the script cli_interface.py with the desired command and arguments. Each command is designed
to handle a specific operation.
python cli_interface.py add_value test_key test_valuepython cli_interface.py get_value test_keypython cli_interface.py clear_key test_keypython cli_interface.py add_value_part test_key part_valueДобавление значения в хранилище.
Параметры:
key(строка) — ключ.value(строка) — значение.finish_value(логическое) — завершён ли ввод значения.user(объект) — информация о пользователе.
Пример запроса:
{
"key": "example",
"value": "some data",
"finish_value": true,
"user": {
"user_id": "123",
"password_hash": "abc123"
}
}Получение значения из хранилища.
Параметры:
key(строка) — ключ.user(объект) — информация о пользователе.
Пример запроса:
{
"key": "example",
"user": {
"user_id": "123",
"password_hash": "abc123"
}
}Пример ответа:
{
"key": "example",
"value": [
"some data"
]
}Удаление значения по ключу.
Параметры:
key(строка) — ключ.user(объект) — информация о пользователе.
Пример запроса:
{
"key": "example",
"user": {
"user_id": "123",
"password_hash": "abc123"
}
}- Запуск автоматических тестов для локального тестирования:
tests/start_test.py
import asyncio
from client import add_value, get_value, clear_key
async def main():
# Добавление значения
await add_value("key", "value")
# Получение значения
value = await get_value("key")
print("Value:", value)
# Очистка ключа
await clear_key("key")
asyncio.run(main())- Поддержка частичных значений для сборки данных по частям.
- Автоматическая синхронизация данных между узлами.
- Валидация пользователей на каждом запросе.
- Данил Еценков