Григорий Сафронов 65ab81a1ac
Some checks are pending
CI / build-32bit (push) Waiting to run
CI / build-libc-malloc (push) Waiting to run
CI / build-almalinux8-jemalloc (push) Waiting to run
CI / test-ubuntu-latest (push) Waiting to run
CI / test-ubuntu-latest-cmake (push) Waiting to run
CI / test-sanitizer-address (push) Waiting to run
CI / test-rdma (push) Waiting to run
CI / build-debian-old (push) Waiting to run
CI / build-macos-latest (push) Waiting to run
CI / format-yaml (push) Waiting to run
Clang Format Check / clang-format-check (push) Waiting to run
Codecov / code-coverage (push) Waiting to run
External Server Tests / test-external-standalone (push) Waiting to run
External Server Tests / test-external-cluster (push) Waiting to run
External Server Tests / test-external-nodebug (push) Waiting to run
Spellcheck / Spellcheck (push) Waiting to run
Update README.md
2025-04-02 20:09:00 +00:00
2025-02-15 15:56:13 +00:00
2025-03-23 19:41:33 +00:00
2024-06-14 13:40:06 -07:00
2025-02-03 18:41:48 +00:00
2025-03-23 15:40:11 +00:00
2025-02-02 21:51:12 +00:00
2024-03-30 14:23:50 +01:00
2025-04-02 20:09:00 +00:00
2024-04-12 11:05:39 -04:00


Futriix

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

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


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

О проекте

Проект Futriix является форком проекта Valkey. Futriix-Распределённая СУБД на языке "C", построенная на базе Valkey, с поддержкой модулей на базе Искусственного интеллекта и модулей на языке Golang.

СУБД поддерживает модуль c распределённым JSON, ИИ-модуль "Виртуальный помощник", SQL-модуль.

Ниже приведён пример того, инструкции по настройке вашего проекта локально. Чтобы запустить локальную копию проекта, выполните следующие простые шаги.

Подготовка

Ниже приведены шаги, которые помогут вам скомпилировать и установить Futriix.

  • Устанавливаем язык программирования C, соопутствующие утилиты (autoconf и другие)
   unix:$ sudo apt update && sudo apt upgrade
   unix:$ sudo apt install build-essential nasm autotools-dev autoconf libjemalloc-dev tcl tcl-dev uuid-dev libcurl4-openssl-dev git

Компиляция

Для того, чтобы успешно скомпилировать проект, выполните шаги ниже:

  1. Скопировать репозиторий
    git clone https://source.futriix.ru/gvsafronov/Futriix
    
  2. Перейти в каталог с исходном кодом src
    cd src/
    

(К началу)

  1. Скомпилировать Futriix с помощью утилиты Make

Futriix может быть скомпилирован для Linux, OSX, OpenBSD, NetBSD, FreeBSD. Мы поддерживаем архитектуры endian и little endian, и 32-битные и 64-битные системы.

    unix:$ make

Для сборки проекта с поддержкой TLS, вам необходима библиотека OpenSSL (например, libssl-dev для Debian/Ubuntu).

Для сборки проекта с поддержкой TLS выпоните команды ниже:

    unix:$ make BUILD_TLS=yes

To build TLS as Futriix module:

    unix:$ make BUILD_TLS=module

Для сборки проекта с экспериментальной поддержкой RDMA вам необходимо установить библиотеку разработки RDMA (например, librdmacm-dev and libibverbs-dev для Debian/Ubuntu).

Для сборки Futriix c поддержкой RDMA просто выполните следующие команды:

    unix:$ make BUILD_RDMA=yes 

To build RDMA as Futriix module:


    unix:$ make BUILD_RDMA=module

Для сборки проекта с поддержкой systemd, вам необходимо установить соответсвующие библиотеки разработки (такие как libsystemd-dev для Debian/Ubuntu или systemd-devel для CentOS) и выполнить следующие команды:

    unix:$ make USE_SYSTEMD=yes

Для добавления суффикса в имя проекта Futriix, выполните следующие команды:

    unix:$ make PROG_SUFFIX="-alt"

После сборки Futriix, мы рекомендуем запустить утилиту для проверки корректности сборки:

    unix:$ make test

Команда выше запустит интегрированные в проект тесты. Additional tests are started using:

    unix:$ make test-unit     # Юнит-тесты
    unix:$ make test-modules  # Тесты модулей API
    unix:$ make test-cluster  # Тест Futriix для проверки работы кластера

Более подробную информацию вы найдёте ознакомившись со следующими источниками: tests/README.md а также src/unit/README.md.

(К началу)

Исправление проблем сборки с зависимостями или кэшированными параметрами сборки.

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

To compile against jemalloc on Mac OS X systems, use:

    unix:$ make MALLOC=jemalloc

Монотонные часы

По умолчанию Futriix будет использовать функцию POSIX clock_gettime в качестве монотонный источник тактовой частоты. В большинстве современных систем внутреннюю тактовую частоту процессора можно использовать для улучшения производительности. Предостережения можно найти здесь: http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/

Для сборки с поддержкой внутренней тактовой частоты процессора, используйте команду ниже:

    unix:$ make CFLAGS="-DUSE_PROCESSOR_CLOCK"

Расширенный вариант сборки

Futriix по умолчанию создает удобный для пользователя цветной вывод. Если вы хотите увидеть более подробный вывод, выполните следующую команду:

    unix:$ make V=1
  1. Если вы хотите запустить сервер Futriix с параметрами по-умолчанию (без указания файла конфигурации) выполните следующую команду:
    `./futriix-server`
    
  2. Также вы можете использовать файл конфигурации, располагающийся в директории "Futriix" futriix.conf для конфигурирования вашего сервера. Для запуска Futriix с файлом конфигурации используйте команду ниже:
./futriix-server /path/to/futriix.conf
  1. Запустите утилиту futriix-cli (Client Futriix) для подключения к локальному серверу Futriix, а также для того чтобы начать работу с инстансом:

    ./futriix-cli
    
  2. Для подключения с помощью утилиты futriix-cli к конкретному узлу в сети, добавьте параметр h-указание удалённого хоста по его ip-адресу и параметр p- указания номера порта:

    ./futriix-cli -h 11.164.22.7 -p 50000
    

(К началу)

Запуск Futriix с RDMA:

Обратите внимание, что поддержка RDMA в Futriix— экспериментальная функция. Она может быть изменена или удалена в любой дополнительной или основной версии. В настоящее время она поддерживается только в Linux.

  • Команда для включения RDMA :

    ./src/futriix-server --protected-mode no \
         --rdma-bind 192.168.122.100 --rdma-port 9880
    
  • Режим работы модуля RDMA:

    ./src/futriix-server --protected-mode no \
         --loadmodule src/Futriix-rdma.so --rdma-bind 192.168.122.100 --rdma-port 9880

Можно изменить адрес/порт привязки RDMA с помощью команды времени выполнения:

unix:$ 192.168.122.100:9880> CONFIG SET rdma-port 9380

Также возможно наличие одновременно RDMA и TCP, но нет конфликт TCP(9880) и RDMA(9880), например:

unix:$ ./src/futriix-server --protected-mode no \
         --loadmodule src/Futriix-rdma.so --rdma-bind 192.168.122.100 --rdma-port 9880 \
         --port 9880

Примечание: Ваша сетевая карта (с ip-адресом 192.168.122.100 в данном примере) должна поддерживать режим RDMA. Для того что понять поддерживает сервер режим RDMA или нет, выполните команду ниже:

    unix:$ rdma res show (a new version iproute2 package)

Или команду ниже:

    unix:$ ibv_devices

Использование

unix:$ cd src
unix:$ ./futriix-cli
127.0.0.1:futriix:~> ping
PONG
127.0.0.1:futriix:~>  set foo bar
OK
127.0.0.1:futriix:~>  get foo
"bar"
127.0.0.1:futriix:~>  incr mycounter
(integer) 1
127.0.0.1:futriix:~>  incr mycounter
(integer) 2
127.0.0.1:futriix:~>  

(К началу)

Кластер

  1. Откройте директорию Futriix
unix:$ cd futriix

  1. Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
unix:$ nano futriix/futriix.conf

  1. Найдите и установите значения "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

  1. Сохраните внесённые вами изменния, выйдите из редактора, воспользовавшись командами ниже:
unix:$ ctrl+O
unix:$ ctrl+x
  1. Перейдите в директорию Futriix и запустите скрипт cluster.sh с параметрами pick (скрипт запущенный с данным параметром "соберёт кластер"), и run,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:
unix:$ ./cluster pick
unix:$ ./cluster run
  1. Установите права на исполнение на скрипт cluster.sh , воспользовавшись командой ниже:
unix:$ chmod +x cluster.sh
  1. Для остановки кластера запустите скрипт cluster.sh с параметром stop
unix:$ ./cluster stop

(К началу)

Дорожная карта

  • Добавить поддержку хранимых процедур
  • Изменить приглашение командной строки клиента futriix-cli
  • Переписать скрипт cluster.sh, формирующий кластер Futriix
  • Добавить поддержку модуля для работы с JSON
  • Добавить в проект поддержку модуля, позволяющего запускать команды терминала операционной системы
  • Реализовать поддержку алгоритма Raft
  • Добавить поддержку языка запросов SQL

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

(К началу)

Вклад

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

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

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

Лицензия

Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле COPYING.txt.

(К началу)

Контакты

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

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

(К началу)

Description
Futriix-Распределённая СУБД на языке С с поддержкой модулей на базе Искусственного интеллекта и плагинов на языке Golang.
https://futriix.ru Readme 151 MiB
Languages
C 73.7%
Tcl 24.6%
Python 0.5%
CMake 0.4%
Ruby 0.3%
Other 0.4%