Проект futriix это мультимодельная NOSQL субд с очередями без блокировок
(К началу)
## Репликация 1. Включите репликацию в конфигурационном файле `futriix.config.toml`, установив enabled = true в секции [replication] в файле конфигурации `futriix.config.toml` ```sh [replication] enabled = false # Включена ли репликация peer_nodes = [] # Список узлов для репликации (например ["192.168.1.2:8080"]) sync_interval = 1000 # Интервал синхронизации в мс ``` 2. Откройте файл конфигурации `futriix.config.toml` в любом текстовом редакторе, например nano, если вы всё сделали правильно, он должен выглядеть так: ```sh $ nano futriix/futriix.conf.toml ``` ```sh [server] ip = "127.0.0.1" # IP-адрес сервера (0.0.0.0 для доступа из сети) port = 8080 # Порт для TCP-сервера log_path = "futriix.log" # Путь к лог-файлу [client] ip = "127.0.0.1" # IP для клиента (обычно localhost) port = 8080 # Порт клиента (должен совпадать с серверным) [replication] enabled = false # Включена ли репликация peer_nodes = [] # Список узлов для репликации (например ["192.168.1.2:8080"]) sync_interval = 1000 # Интервал синхронизации в мс [http_api] enabled = true # Включить HTTP API port = 8081 # Порт для HTTP API (обычно на 1 больше основного) ``` 4. Сохраните внесённые вами изменения, после чего репликация будет доступна в субд, выйдите из редактора, воспользовавшись командами ниже: ```sh $ ctrl+O $ ctrl+x ``` 5. Также для включения репликации вы можете использовать команду в `futriix-cli`: ```sh futriix:~> replication on ``` Сервер автоматически начнёт синхронизацию с указанными пирами (peer_nodes) с заданным интервалом (sync_interval). После включения сервер будет периодически отправлять команды из истории (command_history) на все пиры для поддержания согласованности данных. ### Команды для управления репликацией В проекте добавлены следующие команды для управления репликацией: ```sh replication on — включить репликацию replication off — выключить репликацию replication status — получить статус репликации (включена/выключена, список пиров, время последней синхронизации) replication add-peer(К началу)
## HTTP API Добавление данных: ```sh curl -X POST http://localhost:8081/api/insert \ -d '{"user_42": {"name":"John", "age":30}}' ``` Получение данных: ```sh curl -X GET http://localhost:8081/api/get/user_42 {"name":"John","age":30} ``` ```sh Пакетное обновление: curl -X POST http://localhost:8081/api/update \ -d '{"user_42": {"age":31}, "product_5": {"price":99}}' ``` Пример Python-программы с использованием HTTP-API: ```sh import requests BASE_URL = "http://localhost:8081/api" def set_value(key, value): requests.post(f"{BASE_URL}/insert", json={key: value}) def get_value(key): return requests.get(f"{BASE_URL}/get/{key}").json() ``` **Выключение сервера через CLI** Для того чтобы выключить сервер через CLI, используйте команду `shutdown` введя её в `clif`: ```sh futriix:~> halt Server shutdown initiated ```(К началу)
## Lua-скрипты > [!CAUTION] > **Поддержка работы lua в настоящий момент эксперементальная и может вызвать аварийное завершение сервера!!!** 1. Интерактивный режим работы, (выполнение скрипта в клиенте `futriix-cli`): ```sh futriix:~> futexec lua> return "Hello, " .. os.date("%Y-%m-%d") ``` 2. Выполнение файлов скриптов (c помоью команды в клиенте `SysExec`): ```sh futriix:~> sysexec my_script ```` 3. Доступ к данным из сервера Lua на примера lua-скрипта для чтение и записи данных из субд Скрипты имеют доступ к специальному API: ```sh -- read.lua -- Чтение данных local value = futriix.get("my_key") -- Запись данных futriix.put("temp_key", {data = "test", ts = os.time()}) -- Пример сложной логики for i = 1, 10 do futriix.put("counter/"..i, i*2) end ```(К началу)
## Проблемы В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд Futrix. 1. **Описание проблемы:** После запуска futriix, в лог-файле `futriix.log` дата указывается без указания текущего года: ```sh 11:29:49 [INFO] Futriix Server started successfully 11:29:49 [INFO] Listening on: 127.0.0.1:8080 ``` **Решение:** ```sh На данный момент это выявленный программный баг, нужно ждать выпуска новой версии. :-)) ```(К началу)
## Дорожная карта - [x] Реализовать поддержку хранимых процедур - [x] Реализовать поддержку многопоточности - [x] Реализовать неблокирующие чтение/запись - [x] Реализовать мульти-мастер асинхронную репликацию через файл конфигурации - [x] Реализовать логирование - [x] Реализовать команды сервера для управления репликацией - [x] Реализовать поддержку первичных индексов - [x] Реализовать поддержку протокола MessagePack - [x] Реализовать поддержку транзакций - [x] Добавить механизм сторонних модулей на языке lua, расширяющих базовый функционал сервера - [x] Добавить макет интеллектуального помощника FutBot - [x] Реализовать проверку запуска сервера при запуске клиента (если сервер НЕ запущен клиент не запускается) - [x] Реализовать поддержку HTTP-restfull API - [x] Исправить ошибки записи журнала логов (в журнал лога кроме текущего времени добавить текущий год) - [ ] Реализовать утилиту тестирования сервера на количество запросов на чтение/запись - [ ] Реализовать поддержку алгоритма Raft - [ ] Реализовать поддержку SQL - [ ] Реализовать поддержку вторичных индексов - [ ] Реализовать поддержку ACID-транзакций - [ ] Реализовать полноценного интеллектуального помощника FutBot, задачами которого будут быстрый поиск ответов на вопросы, возникающие при эксплуатации субд Futrix. См. [Открытые проблемы](https://source.futriix.ru/gvsafronov/futriixw/issues) полный список предлагаемых функций (и известных проблем).(К началу)
## Вклад Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад **очень ценится**. Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение». 1. Форкните проект 2. Создайте свою ветку функций (`git checkout -b Feature/AmazingFeature`) 3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`) 4. Отправьте в ветку (`git push main Feature/AmazingFeature`) 5. Откройте запрос на включение ## Контакты Григорий Сафронов - [E-mail](gvsafronov@yandex.ru) Ссылка на Интеллектуальный помощник - [FutBot](https://t.me/Futriix_bot)(К началу)