
Futriix
Futriix's полная документация (команды идентичны)
Изучить полную документацию
Сообщить об ошибке
·
Предложение новой функциональности
Краткая документация проекта Futriix
Содержание
О проекте
Проект Futriix является форком проекта KeyDB.
Futriix-Мультимодельная СУБД на языке С поддержкой плагинов на языке Golang. Ниже приведён пример того, инструкции по настройке вашего проекта локально. Чтобы запустить локальную копию проекта, выполните следующие простые шаги.
Лицензия
Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле COPYING.txt
.
Основные термины
- Инстанс- запущенный экземляр базы данных
- Узел (нода)- мощный сервер
- Кластер- группа компьютеров, объединённых высокоскоростными каналами связи и представляющая с точки зрения пользователя единый аппаратный ресурс
- База Данных(БД)-массив информация, хранящийся, например, на флешке, в файле, на кластере
- Система Управления Базами Данных(СУБД)- Это программа для внесения изменений в базу данных и поиска по ней
Подготовка
Для операционных систем семейства Debian выполните следующие шаги:
-
Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
unix:$ sudo apt update unix:$ sudo apt upgrade unix:$ sudo apt install build-essential nasm autotools-dev autoconf libjemalloc-dev tcl tcl-dev uuid-dev libcurl4-openssl-dev git hugepages
-
Устанавливаем язык программирования Golang по инструкции с официального сайта
Компиляция
- Копируем репозиторий
unix:$ git clone https://source.futriix.ru/gvsafronov/Futriix
- Переходим в каталог с исходном кодом src
unix:$ cd src/
- Компилируем Futriix с помощью утилиты Make
unix:$ make
Futriix может быть скомпилирован для следующих операционных систем: Linux, OSX, OpenBSD, NetBSD, FreeBSD. Мы поддерживаем архитектуры endian и little endian, и 32-битные и 64-битные системы.
Дополнительные параметры компиляции
Для сборки проекта с поддержкой TLS выпоните команду:
unix:$ make BUILD_TLS=yes
Для сбоки проекта с поддержкой TLS, в качестве модуля, выполните команду:
unix:$ make BUILD_TLS=module
Для выполнения данной операции вам необходимо библиотека OpenSSL (например, libssl-dev для Debian/Ubuntu).
(К началу)
Тестирование сборки
После компиляции Futriix, рекомендуем запустить утилиту для проверки корректности сборки:
unix:$ make test
Исправление проблем сборки с зависимостями или кэшированными параметрами сборки.
Futriix содержит некоторые зависимости, которые хранятся в директории deps
.
Утилита make
автоматически не пересобирает зависимости даже если вносятся каие-либо изменения в код зависимостей.
Когда вы обновляете код проекта командой git pull
или когда код внутри
дерева зависимостей изменен каким-либо другим способом, обязательно используйте следующее
команду для того, чтобы действительно все почистить и пересобрать с нуля:
unix:$ make distclean
В результате работы команды выше будут очищены: аллокатор памяти jemalloc, язык lua, библиотеку hiredis, библиотеку linenoise а также другие зависимости.
Кроме того, если вы принудительно используете определенные параметры сборки, такие как 32-битная версия для 32-битной системы, оптимизации компилятора C в данном случае не будут выполнены. Оптимизации (для целей отладки) и другие подобные параметры времени сборки,
кэшируются на неопределенный срок, пока вы не выполните команду make distclean
.
(К началу)
Аллокатор
Выбор аллокатора памяти не по умолчанию при сборке Futriix выполняется путем установки
параметра MALLOC
переменной окружения. Futriix компилируется и компонуется с libc
malloc по умолчанию, за исключением jemalloc, который используется по умолчанию в дистрибутивах Linux.
Это значение по умолчанию было выбрано потому, что в jemalloc меньше
проблем c фрагментацией, чем libc malloc.
Чтобы принудительно скомпилировать libc malloc, выполните следующую команду:
unix:$ make MALLOC=libc
Для компиляции аллокатора jemalloc на операционной системе Mac OS X, выполните команду:
unix:$ make MALLOC=jemalloc
Пример основных команд
В данном разделе приведён пример основных команд субд Futriix
Запускаем клиент Futriix, перейдя в каталог с исходным кодом:
unix:$ 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
, командой ниже:
unix:$ get foo
"bar"
(К началу)
Кластер
- Откройте директорию с Futriix:
unix:$ cd futriix
- Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
unix:$ nano futriix/futriix.conf
- Найдите и установите значения "yes" для параметров "active-replica" и "multi-master". После чего добавьте в файл конфигурации ip-адреса, узлов вашего кластера.
Если вы всё сделали правильно у вас должны отобразится строки в файле конфигурации
futriix.conf
как показано ниже:active-replica yes multi-master yes replicaof 192.168.11.5 9880 replicaof 192.168.11.6 9880 replicaof 192.168.11.7 9880
- Сохраните внесённые вами изменения, выйдите из редактора, воспользовавшись командами ниже:
unix:$ ctrl+O unix:$ ctrl+x
- Перейдите в директорию Futriix и запустите скрипт
cluster.sh
с параметрамиpick
(скрипт запущенный с данным параметром "соберёт кластер"), иrun
,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:unix:$ ./cluster pick unix:$ ./cluster run
- Для остановки кластера запустите скрипт
cluster.sh
с параметромstop
unix:$ ./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, указать корректный путь до файла конфигурации, командой ниже:
unix:$ ./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 будет крутиться в ожидании меньшего времени, прежде чем приостановить поток. Это приводит к лучшей пропускной способности, когда время ЦП ограничено. Однако «правильным» решением является обеспечение того, чтобы время ЦП не было так ограничено.
(К началу)
Дорожная карта
- Добавить поддержку хранимых процедур
- Добавить поддержку многопоточности
- Изменить приглашение командной строки клиента futriix-cli
- Переписать скрипт cluster.sh, формирующий кластер Futriix
- Добавить поддержку модуля для работы с JSON
- Удалить поддержку Sentinel
- Добавить поддержку хранимых процедур
- Добавить поддержку языка запросов SQL
- Реализовать поддержку алгоритма Raft
- Реализовать планировщик задач,основанный на вытесняющей многозадачности
- Реализовать поддержку ACID-транзакций
См. Открытые проблемы полный список предлагаемых функций (и известных проблем).
(К началу)
Вклад
Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад очень ценится.
Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение». Не забудьте поставить проекту звезду! Еще раз спасибо!
- Форкните проект
- Создайте свою ветку функций (
git checkout -b Feature/AmazingFeature
) - Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
- Отправьте в ветку (
git push origin Feature/AmazingFeature
) - Откройте запрос на включение
Контакты
Григорий Сафронов - E-mail
Ссылка на проект (https://source.futriix.ru/gvsafronov/Futriix)
(К началу)