futriis/README.md
2026-02-27 22:04:04 +03:00

295 lines
9.2 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.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
```