295 lines
9.2 KiB
Markdown
295 lines
9.2 KiB
Markdown
|
|
<!-- 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>
|
|||
|
|
·
|
|||
|
|
<!-- <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
|
|||
|
|
```
|