Logo.png

Futriis-это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД, реализованная на Go с поддержкой плагинов на языке lua для операционных систем на базе Solaris (ядра Illumos)



## Краткая документация проекта FutriiS
Содержание
  1. О проекте
  2. Лицензия
  3. Глоссарий
  4. Системные требования
  5. Подготовка
  6. Компиляция
  7. Тестирование
  8. Примеры команд субд
  9. Репликация
  10. Резервное копирование
  11. Индексы
  12. Транзакции
  13. Шардинг
  14. Кластеризация
  15. Lua-скрипты
  16. Сферы применения
  17. Дорожная карта
  18. Контакты
# 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 ```