2025-04-16 18:08:05 +00:00
<!-- Improved compatibility of К началу link: See: https://github.com/othneildrew/Best - README - Template/pull/73 -->
< a id = "readme-top" > < / a >
<!--
*** Thanks for checking out the Best-README-Template. If you have a suggestion
*** that would make this better, please fork the repo and create a pull request
*** or simply open an issue with the tag "enhancement".
*** Don't forget to give the project a star!
*** Thanks again! Now go create something AMAZING! :D
-->
<!-- PROJECT LOGO -->
< br / >
< div align = "center" >
<!-- <a href="https://github.com/othneildrew/Best - README - Template"> -->
< img src = "Logo-Futriix.png" height = 100 > < / img >
< / a >
< h3 align = "center" > Futriix< / h3 >
< p align = "center" >
2025-04-19 12:01:46 +00:00
Проект Futriix основан на базе проекта KeyDB < br >
2025-04-19 12:01:09 +00:00
Futriix's (команды futriix по большей части совпадают с командами KeyDB)
2025-04-16 18:08:05 +00:00
< br / >
2025-04-16 18:08:55 +00:00
< a href = "https://docs.keydb.dev/" > < strong > Изучить полную документацию< / strong > < / a >
2025-04-16 18:08:05 +00:00
< br / >
2025-04-19 12:05:39 +00:00
< br / >
2025-04-19 12:01:09 +00:00
<!-- <a href="">Сообщить о б ошибке</a>
2025-04-16 18:08:05 +00:00
·
2025-04-19 12:01:09 +00:00
<!-- <a href="">Предложение новой функциональности</a> -->
2025-04-16 18:08:05 +00:00
< / p >
< / div >
## Краткая документация проекта Futriix
<!-- TABLE OF CONTENTS -->
< br >
2025-05-03 22:29:22 +00:00
<!-- <details> -->
2025-05-03 22:30:05 +00:00
< summary > < b > Содержание< / b > < / summary > < / br >
2025-04-16 18:08:05 +00:00
< ol >
< li >
< a href = " #о -проекте" > О проекте</ a >
2025-04-18 08:14:34 +00:00
< li >< a href = " #лицензия " > Лицензия</ a ></ li >
2025-04-17 19:16:06 +00:00
< li >< a href = " #основные -термины" > Основные термины</ a ></ li >
2025-04-18 08:14:34 +00:00
< li >< a href = " #подготовка " > Подготовка</ a ></ li >
< li >< a href = " #компиляция " > Компиляция</ a ></ li >
< li >< a href = " #тестирование -сборки" > Тестирование сборки</ a ></ li >
< li >< a href = " #пример -основных-команд" > Пример основных команд</ a ></ li >
< li >< a href = " #кластер " > Кластер</ a ></ li >
< li >< a href = " #типовые -проблемы" > Типовые проблемы</ a ></ li >
< li >< a href = " #дорожная -карта" > Дорожная карта</ a ></ li >
< li >< a href = " #вклад " > Вклад</ a ></ li >
< li >< a href = " #контакты " > Контакты</ a ></ li >
2025-04-16 18:08:05 +00:00
< / ol >
2025-05-03 22:29:22 +00:00
<!-- </details> -->
2025-04-16 18:08:05 +00:00
<!-- ABOUT THE PROJECT -->
## О проекте
2025-05-05 07:49:08 +00:00
Futriix - распределённая СУБД с поддержкой модулей на базе Искусственного Интеллекта (ИИ) и плагинов на языке Golang, является форком KeyDB.
Futriix является резидентной субд, т.е . хранящей свои данные в оперативной памяти, с их периодическим сохранением на внутренний носитель: HDD (жёсткий диск) или SSD-накопитель.
2025-05-03 21:09:55 +00:00
### Отличия futriix от KeyDB
2025-05-18 15:58:56 +00:00
* Скрипт сборки кластера `cluster.sh` переписан в виде внешнего модуля на языке Rust
2025-05-06 07:58:35 +00:00
* Полностью удалена поддержка `Sentinel`
* Добавлены модули поддержки SQL, внешнего запуска команд unix и JSON-модуль
* Реализован интеллектуальный помощник (на базе ИИ), осуществляющий поиск по документации
2025-04-19 11:38:40 +00:00
2025-04-18 08:14:34 +00:00
<!-- LICENSE -->
## Лицензия
Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле `COPYING.txt` .
2025-05-17 17:36:01 +00:00
## Основные термины проекта
2025-04-17 19:16:06 +00:00
2025-05-05 07:49:08 +00:00
* **База Данных(БД)** -массив информация, хранящийся, например, на флешке, в файле, на кластере
* **Система Управления Базами Данных(СУБД)** - Это программа для внесения изменений в базу данных и поиска по ней
* **Резидентная СУБД** - субд, хранящая все свои данные в оперативной памяти, с периодическим сохранением на HDD или SSD
* **Инстанс** - запущенный экземляр базы данных
* **Узел (хост,нода)** - физический сервер
* **Кластер** - группа компьютеров, объединённых высокоскоростными каналами связи и представляющая с точки зрения пользователя единый аппаратный р е с у р с
2025-05-05 07:56:58 +00:00
* Команды, выполняемые с привилегиями суперпользователя (root), отмечены символом приглашения ** «#»**
* Команды, выполняемые с правами обычного пользователя(user), отмечены символом приглашения ** «$»**
2025-05-17 17:36:01 +00:00
## Компоненты проекта
2025-05-03 20:54:40 +00:00
* **FutBot** - интеллектуальный помощник в мессенджере Телеграмм, помогающий осущесвлять быстрый поиск по документации проекта
2025-05-17 17:40:15 +00:00
* **Rfut** - модуль на языке программирования Rust осуществляющая подготовку и сборку кластера futriix из нескольких инстансов
* **futriix-json** - модуль обеспечивающий поддержку формата JSON в проекте
2025-04-17 21:20:09 +00:00
2025-04-17 18:35:24 +00:00
## Подготовка
2025-04-16 18:08:05 +00:00
2025-04-17 18:37:51 +00:00
**Для операционных систем семейства Debian** выполните следующие шаги:
2025-04-16 18:12:05 +00:00
* Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
2025-04-16 18:08:05 +00:00
2025-04-18 08:00:55 +00:00
```sh
2025-05-03 20:54:40 +00:00
# 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
2025-04-18 08:00:55 +00:00
```
2025-04-16 18:08:05 +00:00
2025-05-03 21:22:29 +00:00
**Для операционных систем семейства Red Hat (Fedora, Aurora)** выполните следующие шаги:
2025-05-03 21:17:28 +00:00
* Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
```sh
# dnf update
# dnf install -y jemalloc-devel g++ libuuid-devel libatomic openssl-devel curl-devel cmake git hugepages
```
2025-05-03 21:22:29 +00:00
* Устанавливаем язык программирования Golang по инструкции с [официального сайта ](https://go.dev/doc/install )
**Для операционной системы Alpine** выполните следующие шаги:
* Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
```sh
# 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
```
2025-04-18 08:04:10 +00:00
* Устанавливаем язык программирования Golang по инструкции с [официального сайта ](https://go.dev/doc/install )
2025-04-16 18:08:05 +00:00
2025-04-17 18:39:25 +00:00
## Компиляция
2025-04-16 18:08:05 +00:00
2025-04-17 18:39:25 +00:00
1. Копируем репозиторий
2025-04-16 18:08:05 +00:00
```sh
2025-05-03 21:58:52 +00:00
$ git clone https://source.futriix.ru/gvsafronov/futriix
2025-04-16 18:08:05 +00:00
```
2025-04-17 18:39:25 +00:00
2. Переходим в каталог с исходном кодом src
2025-04-16 18:08:05 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ cd src/
2025-04-17 18:55:19 +00:00
```
2025-04-17 18:49:09 +00:00
3. Компилируем Futriix с помощью утилиты Make
2025-04-17 18:55:19 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make
2025-04-17 18:55:19 +00:00
```
2025-05-03 21:58:52 +00:00
2025-05-03 22:13:25 +00:00
> [!WARNING]
2025-05-03 22:00:45 +00:00
> **Futriix также может быть скомпилирован для следующих операционных систем: `Linux`, `OSX`, `Open Indiana`, `FreeBSD`, но сборка для этих операционных систем не проводилась!!!**
2025-05-03 21:58:52 +00:00
2025-04-16 18:08:05 +00:00
2025-04-17 18:45:08 +00:00
### Дополнительные параметры компиляции
2025-04-17 19:02:33 +00:00
Для сборки проекта с поддержкой TLS выпоните команду:
2025-04-18 08:04:10 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make BUILD_TLS=yes
2025-04-18 08:04:10 +00:00
```
2025-04-17 19:02:33 +00:00
Для сбоки проекта с поддержкой TLS, в качестве модуля, выполните команду:
2025-04-18 08:04:10 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make BUILD_TLS=module
2025-04-18 08:04:10 +00:00
```
2025-04-17 19:02:33 +00:00
Для выполнения данной операции вам необходимо библиотека OpenSSL (например,
libssl-dev для Debian/Ubuntu).
2025-04-18 08:14:34 +00:00
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
2025-04-17 19:02:33 +00:00
## Тестирование сборки
2025-04-16 18:08:05 +00:00
2025-04-17 19:04:01 +00:00
После компиляции Futriix, рекомендуем запустить утилиту для проверки корректности сборки:
2025-04-18 08:04:10 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make test
2025-04-18 08:04:10 +00:00
```
2025-05-03 22:09:46 +00:00
> [!TIP]
2025-05-03 22:11:37 +00:00
> **Исправление проблем сборки с зависимостями или кэшированными параметрами сборки**
2025-05-03 22:05:05 +00:00
> Futriix содержит некоторые зависимости, которые хранятся в директории `deps`.
> Утилита `make` автоматически не пересобирает зависимости даже если вносятся каие-либо изменения в код зависимостей.
2025-04-16 18:08:05 +00:00
Когда вы обновляете код проекта командой `git pull` или когда код внутри
дерева зависимостей изменен каким-либо другим способом, обязательно используйте следующее
команду для того, чтобы действительно все почистить и пересобрать с нуля:
2025-05-03 22:05:05 +00:00
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make distclean
2025-04-18 08:14:34 +00:00
```
2025-04-16 18:08:05 +00:00
В результате работы команды выше будут очищены: аллокатор памяти jemalloc, язык lua, библиотеку hiredis, библиотеку linenoise а также другие зависимости.
Кроме того, если вы принудительно используете определенные параметры сборки, такие как 32-битная версия для 32-битной системы, оптимизации компилятора C в данном случае не будут выполнены. Оптимизации (для целей отладки) и другие подобные параметры времени сборки,
кэшируются на неопределенный срок, пока вы не выполните команду `make distclean` .
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
## Аллокатор
Выбор аллокатора памяти не по умолчанию при сборке Futriix выполняется путем установки
параметра `MALLOC` переменной окружения. Futriix компилируется и компонуется с libc
malloc по умолчанию, за исключением jemalloc, который используется по умолчанию в дистрибутивах Linux.
Это значение по умолчанию было выбрано потому, что в jemalloc меньше
проблем c фрагментацией, чем libc malloc.
Чтобы принудительно скомпилировать libc malloc, выполните следующую команду:
2025-04-17 21:31:05 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make MALLOC=libc
2025-04-17 21:31:05 +00:00
```
2025-04-17 19:39:38 +00:00
Для компиляции аллокатора jemalloc на операционной системе Mac OS X, выполните команду:
2025-04-17 21:31:05 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ make MALLOC=jemalloc
2025-04-17 21:31:05 +00:00
```
2025-04-16 18:08:05 +00:00
<!-- USAGE EXAMPLES -->
2025-04-17 19:10:43 +00:00
## Пример основных команд
2025-04-17 19:39:38 +00:00
В данном разделе приведён пример основных команд субд Futriix
2025-04-16 18:08:05 +00:00
2025-04-17 19:53:24 +00:00
Запускаем клиент Futriix, перейдя в каталог с исходным кодом:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ cd src & & ./futriix-cli
2025-04-17 21:31:05 +00:00
```
2025-04-16 18:08:05 +00:00
2025-04-17 19:39:38 +00:00
Проверяем доступность сервера, выполняяя команду `ping` , если будет получен ответ `pong` -значит сервер доступен и работает корректно
2025-04-18 08:14:34 +00:00
```sh
2025-04-17 21:31:05 +00:00
127.0.0.1:futriix:~> ping
2025-04-18 08:14:34 +00:00
PONG
2025-04-17 21:31:05 +00:00
```
2025-04-17 19:39:38 +00:00
Присваеваем значение переменной `foo` равное `bar` , командой ниже:
2025-04-18 08:14:34 +00:00
```sh
2025-04-17 21:42:16 +00:00
127.0.0.1:futriix:~> set foo bar
2025-04-18 08:14:34 +00:00
OK
2025-04-17 21:31:05 +00:00
```
2025-04-17 19:39:38 +00:00
Получаем значение переменной `foo` , командой ниже:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ get foo
2025-04-17 21:31:05 +00:00
"bar"
```
2025-04-16 18:08:05 +00:00
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
## Кластер
2025-04-17 21:45:05 +00:00
1. Откройте директорию с Futriix:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ cd futriix
2025-04-17 21:53:13 +00:00
```
2025-04-16 18:08:05 +00:00
2. Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ nano futriix/futriix.conf
2025-04-17 21:54:42 +00:00
```
2025-05-03 21:26:21 +00:00
3. Проверьте, установлены ли значения "yes" для параметров "active-replica" и "multi-master" в файле конфигурации `futriix.conf`
После чего добавьте в файл конфигурации ip-адреса, узлов вашего кластера.
Если вы всё сделали правильно у вас должны отобразится строки в файле конфигурации `futriix.conf` как показано ниже:
2025-04-18 08:46:49 +00:00
```sh
2025-05-17 17:36:01 +00:00
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
2025-04-18 08:46:49 +00:00
```
2025-04-17 21:16:21 +00:00
4. Сохраните внесённые вами изменения, выйдите из редактора, воспользовавшись командами ниже:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ ctrl+O
$ ctrl+x
2025-04-17 21:53:13 +00:00
```
2025-04-16 18:08:05 +00:00
5. Перейдите в директорию Futriix и запустите скрипт `cluster.sh` с параметрами `pick` (скрипт запущенный с данным параметром "соберёт кластер"), и `run` ,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ ./cluster pick
$ ./cluster run
2025-04-18 08:14:34 +00:00
```
2025-04-16 18:08:05 +00:00
6. Для остановки кластера запустите скрипт `cluster.sh` с параметром `stop`
2025-04-18 08:14:34 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ ./cluster stop
2025-04-17 21:53:13 +00:00
```
2025-04-16 18:08:05 +00:00
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
2025-04-18 08:04:10 +00:00
## Типовые проблемы
В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд Futrix.
2025-05-03 21:51:32 +00:00
1. **Описание проблемы:** При запуске инстанса futriix, появляется следующее сообщение:
2025-04-18 08:14:34 +00:00
```sh
Warning: no config file specified, using the default config. In order to specify a config file use ./futriix-server /path/to/futriix.conf
```
2025-04-18 08:04:10 +00:00
**Решение:**
При запуске инстанса сервера futriix, указать корректный путь до файла конфигурации, командой ниже:
2025-04-18 08:46:49 +00:00
```sh
2025-05-03 20:50:30 +00:00
$ ./futriix-server /path/to/futriix.conf
2025-04-18 08:46:49 +00:00
```
2025-04-18 08:04:10 +00:00
2. **Описание проблемы:** При запуске инстанса Futriix, появляется следующее сообщение:
2025-04-18 08:14:34 +00:00
```sh
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
```
2025-04-18 08:04:10 +00:00
**Решение:**
2025-04-19 11:19:16 +00:00
Это штатная ситуация, и она не является ошибкой и не вызывает проблем. Суть этого сообщения в том, что futriix пытается корректно обработать ситуацию с превышением нагрузки на ЦП.
2025-04-18 08:04:10 +00:00
Futriix использует спинлоки для быстрой синхронизации. Когда нагрузка на ЦП превышает 100% на ядро, ядро может неосознанно предоставить время ЦП заблокированному потоку, который находится в состоянии ожидания, вместо активного потока. Это приводит к значительно большей задержке.
Когда такая ситуация обнаруживается, Futriix будет крутиться в ожидании меньшего времени, прежде чем приостановить поток. Это приводит к лучшей пропускной способности, когда время ЦП ограничено. Однако «правильным» решением является обеспечение того, чтобы время ЦП не было так ограничено.
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
2025-04-16 18:08:05 +00:00
<!-- ROADMAP -->
## Дорожная карта
- [x] Добавить поддержку хранимых процедур
2025-04-16 18:39:13 +00:00
- [x] Добавить поддержку многопоточности
- [x] Изменить приглашение командной строки клиента futriix-cli
2025-05-03 20:50:30 +00:00
- [x] Добавить в скрипт cluster.sh, формирующий кластер Futriix, цветовые текстовые индикаторы состояния процесса с левой стороны
2025-04-16 18:08:05 +00:00
- [x] Добавить поддержку модуля для работы с JSON
2025-04-16 18:39:13 +00:00
- [x] Удалить поддержку Sentinel
- [x] Добавить поддержку хранимых процедур
- [x] Добавить поддержку языка запросов SQL
2025-05-03 20:50:30 +00:00
- [x] Добавить поддержку запуска внешних команд О С из субд
2025-05-03 21:47:19 +00:00
- [x] Добавить макет интеллектуального помощника FutBot
2025-04-16 18:08:05 +00:00
- [ ] Реализовать поддержку алгоритма Raft
2025-05-03 21:47:19 +00:00
- [ ] Реализовать поддержку роли Podman для автоматического развёртывания кластера в виртуальной среде
2025-04-16 18:39:13 +00:00
- [ ] Реализовать планировщик задач,основанный на вытесняющей многозадачности
- [ ] Реализовать поддержку ACID-транзакций
2025-04-19 11:42:31 +00:00
- [ ] Реализовать полноценного интеллектуального помощника FutBot, задачами которого будут быстрый поиск ответов на вопросы, возникающие при эксплуатации субд Futrix.
2025-04-16 18:08:05 +00:00
2025-05-03 21:31:23 +00:00
См. [Открытые проблемы ](https://source.futriix.ru/gvsafronov/futriix/issues ) полный список предлагаемых функций (и известных проблем).
2025-04-16 18:08:05 +00:00
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >
<!-- CONTRIBUTING -->
## Вклад
Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад **очень ценится** .
Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение».
2025-05-03 21:37:33 +00:00
2025-04-16 18:08:05 +00:00
1. Форкните проект
2. Создайте свою ветку функций (`git checkout -b Feature/AmazingFeature` )
3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
2025-05-03 21:34:59 +00:00
4. Отправьте в ветку (`git push main Feature/AmazingFeature` )
2025-04-16 18:08:05 +00:00
5. Откройте запрос на включение
<!-- CONTACT -->
## Контакты
Григорий Сафронов - [E-mail ](gvsafronov@yandex.ru )
2025-05-03 21:47:19 +00:00
Ссылка на Интеллектуальный помощник - [FutBot ](https://t.me/Futriix_bot )
2025-04-16 18:08:05 +00:00
< p align = "right" > (< a href = " #readme -top" > К началу</ a > )</ p >