futriix/README.md
Григорий Сафронов e6c6b39f9c
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-17 18:39:25 +00:00

318 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 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">
Futriix's полная документация (команды идентичны)
<br />
<a href="https://docs.keydb.dev/"><strong>Изучить полную документацию</strong></a>
<br />
<a href="">Сообщить об ошибке</a>
&middot;
<a href="">Предложение новой функциональности</a>
</p>
</div>
## Краткая документация проекта Futriix
<!-- TABLE OF CONTENTS -->
<br>
<details>
<summary><b>Содержание</b></summary>
<ol>
<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>
</ol>
</details>
<!-- ABOUT THE PROJECT -->
## О проекте
Проект Futriix является форком проекта KeyDB.
Futriix-Мультимодельная СУБД на языке С поддержкой плагинов на языке Golang.
Ниже приведён пример того, инструкции по настройке вашего проекта локально.
Чтобы запустить локальную копию проекта, выполните следующие простые шаги.
## Подготовка
**Для операционных систем семейства Debian** выполните следующие шаги:
* Устанавливаем язык программирования C/C++, соопутствующие утилиты (autoconf и другие)
```sh
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
```
* Устанавливаем язык программирования Golang по инструкции с [официального сайта](https://go.dev/doc/install)
## Компиляция
1. Копируем репозиторий
```sh
git clone https://source.futriix.ru/gvsafronov/Futriix
```
2. Переходим в каталог с исходном кодом src
```sh
cd src/
```
<p align="right">(<a href="#readme-top">К началу</a>)</p>
3. Компилируем Futriix с помощью утилиты Make
Futriix может быть скомпилирован для Linux, OSX, OpenBSD, NetBSD, FreeBSD.
Мы поддерживаем архитектуры endian и little endian, и 32-битные и 64-битные системы.
```sh
unix:$ make
```
Для сборки проекта с поддержкой TLS, вам необходима библиотека OpenSSL (например,
libssl-dev для Debian/Ubuntu).
Для сборки проекта с поддержкой TLS выпоните команды ниже:
```sh
unix:$ make BUILD_TLS=yes
```
To build TLS as Futriix module:
```sh
unix:$ make BUILD_TLS=module
```
После сборки Futriix, мы рекомендуем запустить утилиту для проверки корректности сборки:
```sh
unix:$ make test
```
## Исправление проблем сборки с зависимостями или кэшированными параметрами сборки.
Futriix содержит некоторые зависимости, которые хранятся в директории `deps`.
Утилита `make` автоматически не пересобирает зависимости даже если вносятся каие-либо изменения в код зависимостей.
Когда вы обновляете код проекта командой `git pull` или когда код внутри
дерева зависимостей изменен каким-либо другим способом, обязательно используйте следующее
команду для того, чтобы действительно все почистить и пересобрать с нуля:
```sh
unix:$ make distclean
```
В результате работы команды выше будут очищены: аллокатор памяти 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, выполните следующую команду:
```sh
unix:$ make MALLOC=libc
```
To compile against jemalloc on Mac OS X systems, use:
```sh
unix:$ make MALLOC=jemalloc
```
## Расширенный вариант сборки
Futriix по умолчанию создает удобный для пользователя цветной вывод.
Если вы хотите увидеть более подробный вывод, выполните следующую команду:
```sh
unix:$ make V=1
```
4. Если вы хотите запустить сервер Futriix с параметрами по-умолчанию (без указания файла конфигурации) выполните следующую команду:
```sh
`./futriix-server`
```
5. Также вы можете использовать файл конфигурации, располагающийся в директории "Futriix" `futriix.conf` для конфигурирования вашего сервера.
Для запуска Futriix с файлом конфигурации используйте команду ниже:
```sh
./futriix-server /path/to/futriix.conf
```
6. Запустите утилиту clif (Client Futriix) для подключения к **локальному** серверу Futriix, а также для того чтобы начать работу с инстансом:
```sh
./clif
```
7. Для подключения с помощью утилиты clif к конкретному узлу в сети, добавьте параметр `h`-указание удалённого хоста по его ip-адресу и параметр `p`- указания номера порта:
```sh
./clif -h 11.164.22.7 -p 50000
```
<p align="right">(<a href="#readme-top">К началу</a>)</p>
<!-- USAGE EXAMPLES -->
## Использование
unix:$ cd src
unix:$ ./clif
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:~>
<p align="right">(<a href="#readme-top">К началу</a>)</p>
## Кластер
1. Откройте директорию Futriix
```sh
unix:$ cd futriix
```
2. Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
```sh
unix:$ nano futriix/futriix.conf
```
3. Найдите и установите значения "yes" для параметров "active-replica" и "multi-master". После чего добавьте в файл конфигурации ip-адреса, узлов вашего кластера. Если вы всё сделали правильно у вас должны отробразится строки в файле конфигурации `futriix.conf` как показано ниже:
```sh
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. Сохраните внесённые вами изменния, выйдите из редактора, воспользовавшись командами ниже:
```sh
unix:$ ctrl+O
unix:$ ctrl+x
```
5. Перейдите в директорию Futriix и запустите скрипт `cluster.sh` с параметрами `pick` (скрипт запущенный с данным параметром "соберёт кластер"), и `run`,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:
```sh
unix:$ ./cluster pick
unix:$ ./cluster run
```
6. Для остановки кластера запустите скрипт `cluster.sh` с параметром `stop`
```sh
unix:$ ./cluster stop
```
<p align="right">(<a href="#readme-top">К началу</a>)</p>
<!-- ROADMAP -->
## Дорожная карта
- [x] Добавить поддержку хранимых процедур
- [x] Добавить поддержку многопоточности
- [x] Изменить приглашение командной строки клиента futriix-cli
- [x] Переписать скрипт cluster.sh, формирующий кластер Futriix
- [x] Добавить поддержку модуля для работы с JSON
- [x] Удалить поддержку Sentinel
- [x] Добавить поддержку хранимых процедур
- [x] Добавить поддержку языка запросов SQL
- [ ] Реализовать поддержку алгоритма Raft
- [ ] Реализовать планировщик задач,основанный на вытесняющей многозадачности
- [ ] Реализовать поддержку ACID-транзакций
См. [Открытые проблемы](https://source.futriix.ru/gvsafronov/Futriix/issues) полный список предлагаемых функций (и известных проблем).
<p align="right">(<a href="#readme-top">К началу</a>)</p>
<!-- CONTRIBUTING -->
## Вклад
Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад **очень ценится**.
Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение».
Не забудьте поставить проекту звезду! Еще раз спасибо!
1. Форкните проект
2. Создайте свою ветку функций (`git checkout -b Feature/AmazingFeature`)
3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
4. Отправьте в ветку (`git push origin Feature/AmazingFeature`)
5. Откройте запрос на включение
<!-- LICENSE -->
## Лицензия
Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле `COPYING.txt`.
<p align="right">(<a href="#readme-top">К началу</a>)</p>
<!-- CONTACT -->
## Контакты
Григорий Сафронов - [E-mail](gvsafronov@yandex.ru)
Ссылка на проект (https://source.futriix.ru/gvsafronov/Futriix)
<p align="right">(<a href="#readme-top">К началу</a>)</p>