futriis/README.md

295 lines
9.2 KiB
Markdown
Raw Normal View History

2026-02-27 22:04:04 +03: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.png" height=100 alt="Logo.png"></img>
</a>
<p align="center">
<h3> <b>Futriis-это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД,
реализованная на Go с поддержкой плагинов на языке lua для операционных систем на базе Solaris (ядра Illumos)</b> <br></h3>
<br />
<br />
<!-- <a href="">Сообщить об ошибке</a>
&middot;
<!-- <a href="">Предложение новой функциональности</a> -->
</p>
</div>
## Краткая документация проекта FutriiS
<!-- TABLE OF CONTENTS -->
<br>
<!-- <details> -->
<summary><b>Содержание</b></summary></br>
<ol>
<li>
<a href="#о-проекте">О проекте</a>
<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>
<li><a href="#индексы">Индексы</a></li>
<li><a href="#транзакции">Транзакции</a></li>
<li><a href="#шардинг">Шардинг</a></li>
<li><a href="#кластеризация">Кластеризация</a></li>
<li><a href="#lua-скрипты">Lua-скрипты</a></li>
<li><a href="#сферы-применения">Сферы применения</a></li>
<li><a href="#дорожная-карта">Дорожная карта</a></li>
<li><a href="#контакты">Контакты</a></li>
</ol>
<!-- </details> -->
# futriis - Распределённая in-memory СУБД
futriis - это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД,
реализованная на Go с поддержкой плагинов на языке lua.
## Архитектура
СУБД реализует три основных типа данных:
- **Таппл (Tapple)** - аналог базы данных в РСУБД
- **Слайс (Slice)** - аналог таблицы
- **Кортеж (Tuple)** - аналог записи в таблице
## Системные требования
> [!WARNING]
> - Процессор: Intel или AMD
> - Оперативная память: 4ГБ (Для Linux) 8ГБ (Для Illumos sytems)
> - Только Unix-подобная ОС (Solaris, OpenIndiana, Linux)
> - Go 1.25.6 или выше
> [!CAUTION]
> **Важно: Windows и MacOS X не поддерживаются!**
## Установка и сборка
1. Клонируйте репозиторий:
```bash
git clone https://github.com/futriis/db.git
cd futriis
```
2. Скомпилируйте и запустите:
```bash
./build.sh
./futriis
```
## Файл futriisd
futriisd - это демон (сервис) СУБД Futriis, расположенный в /futriis/build/futriisd. Этот файл является:
- Основным исполняемым файлом сервера - запускает ядро СУБД в фоновом режиме как демон (daemon)
- Точкой входа для кластерного узла - каждый узел кластера запускается через этот бинарный файл
- Фоновым процессом - работает независимо от терминала, обрабатывая сетевые запросы
- Управляющим процессом - отвечает за инициализацию всех компонентов: хранилища, кластера, репликации, AOF
- Сетевым сервером - слушает порты для координации кластера и обработки клиентских подключений
**Пример использования демона "futriisd"**
```bash
# Запуск узла кластера
./futriisd --config /path/to/config.toml --node-id node-1
# Запуск координатора
./futriisd --config /path/to/config.toml --coordinator
# Запуск в фоновом режиме
./futriisd --daemon
```
## Базовые команды (Tapple/Slice/Tuple)
### Создание объектов
```bash
# Создать таппл (базу данных)
create tapple users
# Создать слайс (таблицу) в таппле
create slice users user_profiles
# Создать кортеж (запись) с полями
create tuple users user_profiles user1 name=John age=30 email=john@example.com
create tuple users user_profiles user2 name=Jane age=25 city=NYC
```
### Просмотр списков
```bash
# Показать все тапплы
list tapples
# Показать все слайсы в таппле
list slices users
# Показать все кортежи в слайсе
show tuples users user_profiles
```
## Индексы
```bash
# Создать первичный индекс для таппла
add.prime.index users
# Удалить первичный индекс
delete.prime.index users
# Создать вторичный индекс по полю
add.secondary.index users email
add.secondary.index users age
# Удалить вторичный индекс
delete.secondary.index users email
```
### Обновление и удаление
```bash
# Обновить поля кортежа
update tuple users user_profiles user1 age=31 city=Boston
# Удалить кортеж
delete tuple users user_profiles user2
# Удалить слайс
delete slice users user_profiles
# Удалить таппл
delete tapple users
```
## Транзакции
```bash
# Начать транзакцию
begin
# Выполнить операции внутри транзакции
create tuple users user_profiles user3 name=Bob age=28
update tuple users user_profiles user1 city=Chicago
# Зафиксировать транзакцию
commit
# Или откатить транзакцию
rollback
```
## Кластеринг и шардинг
```bash
# Показать статус кластера
cluster.status
# Добавить узел в кластер
add.node 192.168.1.101:8080
add.node 192.168.1.102:8080
# Удалить узел из кластера
evict.node node-123
# Ребалансировка кластера
cluster.rebalance
# Показать статус шардинга
sharding.status
```
## Сжатие данных
```bash
# Показать статистику сжатия по колонкам
compression.stats
```
## AOF (Append-Only File)
```bash
# Показать информацию о AOF файле
aof.info
# Восстановить данные из AOF файла
aof.recover
aof.recover /path/to/custom/file.aof
```
## Lua-плагины
```bash
# Выполнить Lua плагин
lua my_plugin
lua analytics_script
```
## Служебные команды
```bash
# Показать справку
help
# Выйти из СУБД
exit
# или
quit
```
## Комплексный пример рабочей сессии
```bash
# Создаём структуру данных
create tapple ecommerce
create slice ecommerce products
create slice ecommerce customers
create slice ecommerce orders
# Создаём индексы
add.secondary.index ecommerce price
add.secondary.index ecommerce email
# Добавляем данные (в транзакции)
begin
create tuple ecommerce products prod1 name=Laptop price=999.99 stock=10
create tuple ecommerce products prod2 name=Mouse price=29.99 stock=50
create tuple ecommerce customers cust1 name=Alice email=alice@mail.com
create tuple ecommerce orders order1 customer=cust1 product=prod1 quantity=1
commit
# Просматриваем данные
show tuples ecommerce products
show tuples ecommerce customers
# Обновляем данные
update tuple ecommerce products prod1 stock=9
# Проверяем статус кластера
cluster.status
# Смотрим статистику сжатия
compression.stats
# Выходим
exit
```