Краткая документация проекта Futriix
- О проекте
- Лицензия
- Основные термины
- Подготовка
- Компиляция
- Примеры
- Кластер
- Проблемы
- Дорожная карта
- Вклад
- Контакты
О проекте
Futriix это NOSQL документ-ориентированная субд без блокировок написанная на языке программирования Rust. Futriix является резидентной субд, т.е. хранящей свои данные в оперативной памяти, с их периодическим сохранением на внутренний носитель: HDD (жёсткий диск) или SSD-накопитель.
Лицензия
Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле LICENSE.txt
.
Основные термины
- База Данных(БД) -массив информация, хранящийся, например, на флешке, в файле, на кластере
- Система Управления Базами Данных(СУБД) - Это программа для внесения изменений в базу данных и поиска по ней
- Резидентная СУБД - субд, хранящая все свои данные в оперативной памяти, с периодическим сохранением на HDD или SSD
- Инстанс - запущенный экземляр базы данных
- Узел (хост,нода) - физический сервер
- Кластер - группа компьютеров, объединённых высокоскоростными каналами связи и представляющая с точки зрения пользователя единый аппаратный ресурс
- Команды, выполняемые с привилегиями суперпользователя (root), отмечены символом приглашения «#»
- Команды, выполняемые с правами обычного пользователя(user), отмечены символом приглашения «$»
- FutBot - интеллектуальный помощник в мессенджере Телеграмм, помогающий осущесвлять быстрый поиск по документации проекта
Подготовка
Для операционных систем семейства Debian выполните следующие шаги:
-
Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
# apt update # apt upgrade # apt install build-essential nasm autotools-dev autoconf libjemalloc-dev tcl tcl-dev uuid-dev libcurl4-openssl-dev cmake git hugepages
Для операционных систем семейства Red Hat (Fedora, Aurora) выполните следующие шаги:
-
Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
# dnf update # dnf install -y jemalloc-devel g++ libuuid-devel libatomic openssl-devel curl-devel cmake git hugepages
-
Устанавливаем язык программирования Golang по инструкции с официального сайта
Для операционной системы Alpine выполните следующие шаги:
-
Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
# apk update # apk add --no-cache coreutils gcc linux-headers make musl-dev util-linux-dev openssl-dev curl-dev g++ bash git perl libunwind-dev
-
Устанавливаем язык программирования Golang по инструкции с официального сайта
Компиляция
- Копируем репозиторий
$ git clone https://source.futriix.ru/gvsafronov/futriixw
- Переходим в каталог с исходном кодом src
$ cd futriixw/
- Компилируем Futriix с помощью утилиты Make
$ cargo build
Warning
Futriix также может быть скомпилирован для следующих операционных систем:
Linux
,OSX
,Open Indiana
,FreeBSD
, но сборка для этих операционных систем не проводилась!!!
Примеры
В данном разделе приведён пример основных команд субд Futriix
Запускаем клиент Futriix, перейдя в каталог с исходным кодом:
$ cd src && ./futriix-cli
Проверяем доступность сервера, выполняяя команду ping
, если будет получен ответ pong
-значит сервер доступен и работает корректно
127.0.0.1:futriix:~> ping
PONG
Присваеваем значение переменной foo
равное bar
, командой ниже:
127.0.0.1:futriix:~> set foo bar
OK
Получаем значение переменной foo
, командой ниже:
$ get foo
"bar"
(К началу)
Кластер
- Откройте директорию с Futriix:
$ cd futriix
- Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
$ nano futriix/futriix.conf
- Проверьте, установлены ли значения "yes" для параметров "active-replica" и "multi-master" в файле конфигурации
futriix.conf
После чего добавьте в файл конфигурации ip-адреса, узлов вашего кластера. Если вы всё сделали правильно у вас должны отобразится строки в файле конфигурацииfutriix.conf
как показано ниже:port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
- Сохраните внесённые вами изменения, выйдите из редактора, воспользовавшись командами ниже:
$ ctrl+O $ ctrl+x
- Перейдите в директорию Futriix и запустите скрипт
cluster.sh
с параметрамиpick
(скрипт запущенный с данным параметром "соберёт кластер"), иrun
,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:$ ./cluster pick $ ./cluster run
- Для остановки кластера запустите скрипт
cluster.sh
с параметромstop
$ ./cluster stop
(К началу)
Проблемы
В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд Futrix.
- Описание проблемы: При запуске инстанса futriix, появляется следующее сообщение:
Warning: no config file specified, using the default config. In order to specify a config file use ./futriix-server /path/to/futriix.conf
Решение:
При запуске инстанса сервера futriix, указать корректный путь до файла конфигурации, командой ниже:
$ ./futriix-server /path/to/futriix.conf
- Описание проблемы: При запуске инстанса Futriix, появляется следующее сообщение:
1:12:S 18 Apr 2025 04:47:25.643 # NOTICE: Detuning locks due to high load per core: 97.49% 1:12:S 18 Apr 2025 04:47:55.491 # NOTICE: CPU pressure reduced
Решение:
Это штатная ситуация, и она не является ошибкой и не вызывает проблем. Суть этого сообщения в том, что futriix пытается корректно обработать ситуацию с превышением нагрузки на ЦП.
Futriix использует спинлоки для быстрой синхронизации. Когда нагрузка на ЦП превышает 100% на ядро, ядро может неосознанно предоставить время ЦП заблокированному потоку, который находится в состоянии ожидания, вместо активного потока. Это приводит к значительно большей задержке.
Когда такая ситуация обнаруживается, Futriix будет крутиться в ожидании меньшего времени, прежде чем приостановить поток. Это приводит к лучшей пропускной способности, когда время ЦП ограничено. Однако «правильным» решением является обеспечение того, чтобы время ЦП не было так ограничено.
(К началу)
Дорожная карта
- Реализовать поддержку хранимых процедур
- Реализовать поддержку многопоточности
- Реализовать неблокирующие чтение/запись
- Реализовать мульти-мастер репликацию
- Реализовать поддержку первичных индексов
- Реализовать поддержку протокола MessagePack
- Реализовать поддержку транзакций
- Добавить механизм сторонних модулей,расширяющих базовый функционал сервера
- Добавить макет интеллектуального помощника FutBot
- Реализовать проверку запуска сервера при запуске клиента (если сервер НЕ запущен клиент не запускается)
- Реализовать утилиту тестирования сервера на количество запросов на чтение/запись
- Реализовать поддержку алгоритма Raft
- Реализовать поддержку SQL
- Реализовать поддержку ACID-транзакций
- Реализовать полноценного интеллектуального помощника FutBot, задачами которого будут быстрый поиск ответов на вопросы, возникающие при эксплуатации субд Futrix.
См. Открытые проблемы полный список предлагаемых функций (и известных проблем).
(К началу)
Вклад
Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад очень ценится.
Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение».
- Форкните проект
- Создайте свою ветку функций (
git checkout -b Feature/AmazingFeature
) - Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
- Отправьте в ветку (
git push main Feature/AmazingFeature
) - Откройте запрос на включение
Контакты
Григорий Сафронов - E-mail
Ссылка на Интеллектуальный помощник - FutBot
(К началу)