9.2 KiB
9.2 KiB
Futriis-это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД,
реализованная на Go с поддержкой плагинов на языке lua для операционных систем на базе Solaris (ядра Illumos)
Краткая документация проекта FutriiS
- О проекте
- Лицензия
- Глоссарий
- Системные требования
- Подготовка
- Компиляция
- Тестирование
- Примеры команд субд
- Репликация
- Резервное копирование
- Индексы
- Транзакции
- Шардинг
- Кластеризация
- Lua-скрипты
- Сферы применения
- Дорожная карта
- Контакты
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 не поддерживаются!
Установка и сборка
- Клонируйте репозиторий:
git clone https://github.com/futriis/db.git
cd futriis
- Скомпилируйте и запустите:
./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
Просмотр списков
# Показать все тапплы
list tapples
# Показать все слайсы в таппле
list slices users
# Показать все кортежи в слайсе
show tuples users user_profiles
Индексы
# Создать первичный индекс для таппла
add.prime.index users
# Удалить первичный индекс
delete.prime.index users
# Создать вторичный индекс по полю
add.secondary.index users email
add.secondary.index users age
# Удалить вторичный индекс
delete.secondary.index users email
Обновление и удаление
# Обновить поля кортежа
update tuple users user_profiles user1 age=31 city=Boston
# Удалить кортеж
delete tuple users user_profiles user2
# Удалить слайс
delete slice users user_profiles
# Удалить таппл
delete tapple users
Транзакции
# Начать транзакцию
begin
# Выполнить операции внутри транзакции
create tuple users user_profiles user3 name=Bob age=28
update tuple users user_profiles user1 city=Chicago
# Зафиксировать транзакцию
commit
# Или откатить транзакцию
rollback
Кластеринг и шардинг
# Показать статус кластера
cluster.status
# Добавить узел в кластер
add.node 192.168.1.101:8080
add.node 192.168.1.102:8080
# Удалить узел из кластера
evict.node node-123
# Ребалансировка кластера
cluster.rebalance
# Показать статус шардинга
sharding.status
Сжатие данных
# Показать статистику сжатия по колонкам
compression.stats
AOF (Append-Only File)
# Показать информацию о AOF файле
aof.info
# Восстановить данные из AOF файла
aof.recover
aof.recover /path/to/custom/file.aof
Lua-плагины
# Выполнить Lua плагин
lua my_plugin
lua analytics_script
Служебные команды
# Показать справку
help
# Выйти из СУБД
exit
# или
quit
Комплексный пример рабочей сессии
# Создаём структуру данных
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