Александр Кузнецов ae06baaf95
Some checks are pending
CI / test-ubuntu-latest (push) Waiting to run
CI / build-ubuntu-old (push) Waiting to run
CI / build-macos-latest (push) Waiting to run
CI / build-libc-malloc (push) Waiting to run
Update README.md
2025-04-18 08:46:49 +00:00
2022-12-29 14:47:06 -05:00
2019-09-28 17:04:08 -04:00
2025-04-15 17:27:20 +00:00
2025-04-15 17:21:01 +00:00
2022-02-02 14:20:19 -05:00
2021-08-19 17:42:52 +00:00
2021-10-04 13:59:40 +03:00
2023-09-28 18:13:27 -04:00
2025-04-16 18:14:39 +00:00
2022-02-11 16:36:42 -08:00
2025-04-18 08:46:49 +00:00
2022-02-11 16:36:42 -08:00


Futriix

Futriix's полная документация (команды идентичны)
Изучить полную документацию
Сообщить об ошибке · Предложение новой функциональности

Краткая документация проекта Futriix


Содержание
  1. О проекте
  2. Лицензия
  3. Основные термины
  4. Подготовка
  5. Компиляция
  6. Тестирование сборки
  7. Пример основных команд
  8. Кластер
  9. Типовые проблемы
  10. Дорожная карта
  11. Вклад
  12. Контакты

О проекте

Проект 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 по инструкции с официального сайта

Компиляция

  1. Копируем репозиторий
     unix:$ git clone https://source.futriix.ru/gvsafronov/Futriix
    
  2. Переходим в каталог с исходном кодом src
     unix:$ cd src/
    
  3. Компилируем 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"

(К началу)

Кластер

  1. Откройте директорию с Futriix:
     unix:$ cd futriix
    
  2. Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
     unix:$ nano futriix/futriix.conf
    
  3. Найдите и установите значения "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
    
  4. Сохраните внесённые вами изменения, выйдите из редактора, воспользовавшись командами ниже:
     unix:$ ctrl+O
     unix:$ ctrl+x
    
  5. Перейдите в директорию Futriix и запустите скрипт cluster.sh с параметрами pick (скрипт запущенный с данным параметром "соберёт кластер"), и run,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:
     unix:$ ./cluster pick
     unix:$ ./cluster run
    
  6. Для остановки кластера запустите скрипт cluster.sh с параметром stop
     unix:$ ./cluster stop
    

(К началу)

Типовые проблемы

В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд Futrix.

  1. Описание проблемы: При запуске инстанса 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
  1. Описание проблемы: При запуске инстанса 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-транзакций

См. Открытые проблемы полный список предлагаемых функций (и известных проблем).

(К началу)

Вклад

Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад очень ценится.

Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение». Не забудьте поставить проекту звезду! Еще раз спасибо!

  1. Форкните проект
  2. Создайте свою ветку функций (git checkout -b Feature/AmazingFeature)
  3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
  4. Отправьте в ветку (git push origin Feature/AmazingFeature)
  5. Откройте запрос на включение

Контакты

Григорий Сафронов - E-mail

Ссылка на проект (https://source.futriix.ru/gvsafronov/Futriix)

(К началу)

Description
Futriix-Распределённая СУБД с поддержкой модулей на базе Искусственного интеллекта и плагинов на языке Golang.
https://futriix.ru Readme 35 MiB
Languages
C++ 58.9%
C 22%
Tcl 17.2%
Shell 0.6%
Makefile 0.4%
Other 0.8%