From 95d67d9197244ffe6f77b49b5e0badf5ff29647c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 May 2026 18:47:19 +0000 Subject: [PATCH] Update README.md --- README.md | 196 +++++++++++++++++++++++++++--------------------------- 1 file changed, 97 insertions(+), 99 deletions(-) diff --git a/README.md b/README.md index 7212111..d9cd39b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@

-

Futriis-это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД, +

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



@@ -26,7 +26,7 @@

- ## Краткая документация проекта FutriiS + ## Краткая документация проекта futriix
@@ -63,7 +63,7 @@ > [!CAUTION] > **ALPHA VERSION**

**Категорически не использовать в продакшене, так как это экспериментальная версия!!!** -futriis - это легковесная, распределённая, использующая алгоритмы неблокирующей синхронизации - `wait-free` и `lock-free` in-memory СУБД, реализованная на языке Go с поддержкой плагинов на языке lua использующая алгоритм консенсуса Raft. +futriix - это легковесная, распределённая, использующая алгоритмы неблокирующей синхронизации - `wait-free` и `lock-free` in-memory СУБД, реализованная на языке Go с поддержкой плагинов на языке lua использующая алгоритм консенсуса Raft. Данная субд была разработана, в первую очередь для эксплуатации в операционных системах на базе ядра Illumos и операционной системы Solaris: OpenIndiana Hipster, Oracle Solaris в замкнутых программных средах. Но также она совместима с популярными Linux-дистрибутивами (Debian,Ubuntu,Fedora), т.е. операционными системами построенными на базе ядра Linux. @@ -127,8 +127,8 @@ futriis - это легковесная, распределённая, испо 1. Клонируйте репозиторий: ```bash -$ git clone https://github.com/futriis/db.git -$ cd futriis +$ git clone https://github.com/futriix/db.git +$ cd futriix ``` > [!IMPORTANT] @@ -166,7 +166,7 @@ $ ./build_illumos.sh # Показать справку $./build.sh --help -$ ./futriis +$ ./futriix ```

(К началу)

@@ -214,28 +214,28 @@ done ```sh # Создание новой базы данных -futriiS:~> create database company +futriix:~> create database company ✓ Database 'company' created -futriiS:~> create database shop +futriix:~> create database shop ✓ Database 'shop' created # Переключение на базу данных -futriiS:~> use company +futriix:~> use company ✓ Switched to database 'company' -futriiS:~> use shop +futriix:~> use shop ✓ Switched to database 'shop' # Просмотр всех баз данных -futriiS:~> show databases +futriix:~> show databases Databases: company * shop test # Удаление базы данных -futriiS:~> drop database test +futriix:~> drop database test ✓ Database 'test' dropped ``` @@ -245,70 +245,70 @@ futriiS:~> drop database test ```sh # Создание новой базы данных -futriiS:~> create database company +futriix:~> create database company ✓ Database 'company' created -futriiS:~> create database shop +futriix:~> create database shop ✓ Database 'shop' created # Переключение на базу данных -futriiS:~> use company +futriix:~> use company ✓ Switched to database 'company' -futriiS:~> use shop +futriix:~> use shop ✓ Switched to database 'shop' # Просмотр всех баз данных -futriiS:~> show databases +futriix:~> show databases Databases: company * shop test # Удаление базы данных -futriiS:~> drop database test +futriix:~> drop database test ✓ Database 'test' dropped ``` ```sh # Создание коллекции -futriiS:~> use company +futriix:~> use company ✓ Switched to database 'company' -futriiS:~> create collection employees +futriix:~> create collection employees ✓ Collection 'employees' created in database 'company' -futriiS:~> create collection departments +futriix:~> create collection departments ✓ Collection 'departments' created in database 'company' -futriiS:~> create collection projects +futriix:~> create collection projects ✓ Collection 'projects' created in database 'company' # Просмотр всех коллекций -futriiS:~> show collections +futriix:~> show collections Collections in database 'company': - employees - departments - projects # Удаление коллекции -futriiS:~> drop collection projects +futriix:~> drop collection projects ✓ Collection 'projects' dropped from database 'company' ``` ```sh # Вставка документа (простой формат key=value) -futriiS:~> insert employees name=John Doe,position=Developer,age=30,department=IT +futriix:~> insert employees name=John Doe,position=Developer,age=30,department=IT ✓ Document inserted with ID: 550e8400-e29b-41d4-a716-446655440000 -futriiS:~> insert employees name=Jane Smith,position=Manager,age=35,department=HR +futriix:~> insert employees name=Jane Smith,position=Manager,age=35,department=HR ✓ Document inserted with ID: 550e8400-e29b-41d4-a716-446655440001 -futriiS:~> insert employees name=Bob Johnson,position=Designer,age=28,department=Design +futriix:~> insert employees name=Bob Johnson,position=Designer,age=28,department=Design ✓ Document inserted with ID: 550e8400-e29b-41d4-a716-446655440002 # Поиск документа по ID -futriiS:~> find employees 550e8400-e29b-41d4-a716-446655440000 +futriix:~> find employees 550e8400-e29b-41d4-a716-446655440000 Document found: { "name": "John Doe", @@ -318,7 +318,7 @@ Document found: } # Поиск по индексу -futriiS:~> findbyindex employees name_idx "John Doe" +futriix:~> findbyindex employees name_idx "John Doe" Found 1 document(s): [1] ID: 550e8400-e29b-41d4-a716-446655440000 { @@ -329,18 +329,18 @@ Found 1 document(s): } # Обновление документа -futriiS:~> update employees 550e8400-e29b-41d4-a716-446655440000 age=31,position=Senior Developer +futriix:~> update employees 550e8400-e29b-41d4-a716-446655440000 age=31,position=Senior Developer ✓ Document '550e8400-e29b-41d4-a716-446655440000' updated # Подсчёт количества документов -futriiS:~> count employees +futriix:~> count employees Collection 'employees' has 3 document(s) # Удаление документа -futriiS:~> delete employees 550e8400-e29b-41d4-a716-446655440002 +futriix:~> delete employees 550e8400-e29b-41d4-a716-446655440002 ✓ Document '550e8400-e29b-41d4-a716-446655440002' deleted -futriiS:~> count employees +futriix:~> count employees Collection 'employees' has 2 document(s) ``` @@ -351,19 +351,19 @@ Collection 'employees' has 2 document(s) ```sh # Создание обычного индекса -futriiS:~> create index employees name_idx name +futriix:~> create index employees name_idx name ✓ Index 'name_idx' created on collection 'employees' # Создание уникального индекса -futriiS:~> create index employees email_idx email unique +futriix:~> create index employees email_idx email unique ✓ Index 'email_idx' created on collection 'employees' # Создание составного индекса -futriiS:~> create index employees dept_age_idx department,age +futriix:~> create index employees dept_age_idx department,age ✓ Index 'dept_age_idx' created on collection 'employees' # Просмотр всех индексов -futriiS:~> show indexes employees +futriix:~> show indexes employees Indexes on collection 'employees': - _id_ - name_idx @@ -371,7 +371,7 @@ Indexes on collection 'employees': - dept_age_idx # Удаление индекса -futriiS:~> drop index employees dept_age_idx +futriix:~> drop index employees dept_age_idx ✓ Index 'dept_age_idx' dropped from collection 'employees' ``` @@ -381,32 +381,32 @@ futriiS:~> drop index employees dept_age_idx ```sh # Начало сессии -futriiS:~> db.startSession() +futriix:~> db.startSession() ✓ Session started: session_12345 # Начало транзакции в рамках сессии -futriiS:~> session.startTransaction() +futriix:~> session.startTransaction() ✓ Transaction started: TX_67890 # Выполнение операций в транзакции -futriiS:~> insert employees name=New User,position=Trainee,age=22 +futriix:~> insert employees name=New User,position=Trainee,age=22 ✓ Document inserted with ID: 550e8400-e29b-41d4-a716-446655440005 -futriiS:~> update employees 550e8400-e29b-41d4-a716-446655440005 status=active +futriix:~> update employees 550e8400-e29b-41d4-a716-446655440005 status=active ✓ Document '550e8400-e29b-41d4-a716-446655440005' updated # Подтверждение транзакции -futriiS:~> session.commitTransaction() +futriix:~> session.commitTransaction() ✓ Transaction committed successfully # Откат транзакции (при ошибке) -futriiS:~> session.startTransaction() +futriix:~> session.startTransaction() ✓ Transaction started: TX_67891 -futriiS:~> insert employees name=Test User,position=Test,age=25 +futriix:~> insert employees name=Test User,position=Test,age=25 ✓ Document inserted with ID: 550e8400-e29b-41d4-a716-446655440006 -futriiS:~> session.abortTransaction() +futriix:~> session.abortTransaction() ✓ Transaction aborted, changes rolled back ``` @@ -417,7 +417,7 @@ futriiS:~> session.abortTransaction() ```sh # Просмотр статуса кластера -futriiS:~> status +futriix:~> status === Cluster Status === ✓ Role: LEADER Cluster Name: production @@ -425,7 +425,7 @@ futriiS:~> status Raft Port: 7000 # В режиме follower -futriiS:~> status +futriix:~> status === Cluster Status === ⚠ Role: FOLLOWER Cluster Name: production @@ -433,7 +433,7 @@ futriiS:~> status Raft Port: 7000 # Просмотр всех узлов кластера -futriiS:~> nodes +futriix:~> nodes === Cluster Nodes === * 192.168.1.100:8080 192.168.1.101:8080 @@ -446,23 +446,23 @@ futriiS:~> nodes ```sh # Добавление обязательного поля -futriiS:~> add required employees email +futriix:~> add required employees email ✓ Required field 'email' added to collection 'employees' # Добавление ограничения уникальности -futriiS:~> add unique employees phone +futriix:~> add unique employees phone ✓ Unique constraint added for field 'phone' on collection 'employees' # Добавление минимального значения -futriiS:~> add min employees age 18 +futriix:~> add min employees age 18 ✓ Min constraint added for field 'age' on collection 'employees' (min: 18.00) # Добавление максимального значения -futriiS:~> add max employees age 65 +futriix:~> add max employees age 65 ✓ Max constraint added for field 'age' on collection 'employees' (max: 65.00) # Добавление enum-ограничения (допустимые значения) -futriiS:~> add enum employees status active,inactive,on_leave +futriix:~> add enum employees status active,inactive,on_leave ✓ Enum constraint added for field 'status' on collection 'employees' (allowed: [active inactive on_leave]) ```

(К началу)

@@ -472,15 +472,15 @@ futriiS:~> add enum employees status active,inactive,on_leave ```sh # Экспорт базы данных в файл MessagePack -futriiS:~> export "company" "company_backup.msgpack" +futriix:~> export "company" "company_backup.msgpack" ✓ Database 'company' exported to company_backup.msgpack # Экспорт с автоматическим добавлением расширения -futriiS:~> export "shop" "shop_backup" +futriix:~> export "shop" "shop_backup" ✓ Database 'shop' exported to shop_backup.msgpack # Импорт базы данных из файла -futriiS:~> import "company" "company_backup.msgpack" +futriix:~> import "company" "company_backup.msgpack" Importing data from company_backup.msgpack to database 'company'... ✓ Database 'company' imported successfully from company_backup.msgpack Collections imported: 2 @@ -489,7 +489,7 @@ Importing data from company_backup.msgpack to database 'company'... Documents failed: 0 # Импорт в новую базу данных -futriiS:~> import "company_restore" "company_backup.msgpack" +futriix:~> import "company_restore" "company_backup.msgpack" Created database 'company_restore' ✓ Database 'company_restore' imported successfully from company_backup.msgpack Collections imported: 2 @@ -502,7 +502,7 @@ Created database 'company_restore' ```sh # Просмотр информации о системе плагинов -futriiS:~> plugin status +futriix:~> plugin status === Plugin System Status === Enabled: true Plugins Directory: ./plugins @@ -510,7 +510,7 @@ futriiS:~> plugin status Total Executions: 125 # Список загруженных плагинов -futriiS:~> plugin list +futriix:~> plugin list === Loaded Plugins === validation (v1.0.0) by admin - Document validation rules Status: RUNNING @@ -520,21 +520,21 @@ futriiS:~> plugin list Status: RUNNING # Загрузка плагина из файла -futriiS:~> plugin load email_notifier ./plugins/email_notifier.lua +futriix:~> plugin load email_notifier ./plugins/email_notifier.lua ✓ Plugin 'email_notifier' loaded successfully Version: 1.0.0 Author: admin Description: Send email notifications on database events # Запуск/остановка плагина -futriiS:~> plugin start email_notifier +futriix:~> plugin start email_notifier ✓ Plugin 'email_notifier' started -futriiS:~> plugin stop email_notifier +futriix:~> plugin stop email_notifier ✓ Plugin 'email_notifier' stopped # Выгрузка плагина -futriiS:~> plugin unload email_notifier +futriix:~> plugin unload email_notifier ✓ Plugin 'email_notifier' unloaded ``` @@ -641,39 +641,39 @@ end ```sh # Создание базы данных и коллекции -futriiS:~> create database company +futriix:~> create database company ✓ Database 'company' created -futriiS:~> use company +futriix:~> use company ✓ Switched to database 'company' -futriiS:~> create collection employees +futriix:~> create collection employees ✓ Collection 'employees' created in database 'company' # Загрузка и запуск плагина валидации -futriiS:~> plugin load validation ./plugins/validation.lua +futriix:~> plugin load validation ./plugins/validation.lua ✓ Plugin 'validation' loaded successfully Version: 1.0.0 Author: admin Description: Document validation rules for employees collection -futriiS:~> plugin start validation +futriix:~> plugin start validation ✓ Plugin 'validation' started # Вставка валидного документа -futriiS:~> insert employees name=John Doe,age=25,email=john@company.com,salary=45000 +futriix:~> insert employees name=John Doe,age=25,email=john@company.com,salary=45000 ✓ Document inserted with ID: emp_001 # Вставка невалидного документа (возраст < 18) -futriiS:~> insert employees name=Jane Smith,age=16,email=jane@company.com,salary=20000 +futriix:~> insert employees name=Jane Smith,age=16,email=jane@company.com,salary=20000 Error: Employee must be at least 18 years old # Вставка невалидного документа (некорректный email) -futriiS:~> insert employees name=Bob Johnson,age=30,email=invalid-email,salary=50000 +futriix:~> insert employees name=Bob Johnson,age=30,email=invalid-email,salary=50000 Error: Invalid email format # Выполнение пользовательской функции плагина -futriiS:~> plugin call validation validate_collection employees +futriix:~> plugin call validation validate_collection employees ✓ Function returned: 0 ``` @@ -707,30 +707,30 @@ curl -X POST http://localhost:8080/api/plugin/call \ ```sh # Вход в систему -futriiS:~> acl login admin admin +futriix:~> acl login admin admin ✓ Logged in as 'admin' with role 'admin' # Выход из системы -futriiS:~> acl logout +futriix:~> acl logout ✓ Logged out # Назначение прав доступа (после входа как admin) -futriiS:~> acl login admin admin +futriix:~> acl login admin admin ✓ Logged in as 'admin' with role 'admin' -futriiS:~> use company +futriix:~> use company ✓ Switched to database 'company' # Назначение прав на чтение -futriiS:~> acl grant employees reader r +futriix:~> acl grant employees reader r ✓ Permissions 'r' granted to role 'reader' on collection 'employees' # Назначение прав на чтение и запись -futriiS:~> acl grant employees editor rw +futriix:~> acl grant employees editor rw ✓ Permissions 'rw' granted to role 'editor' on collection 'employees' # Назначение полных прав (администратор коллекции) -futriiS:~> acl grant employees admin rwda +futriix:~> acl grant employees admin rwda ✓ Permissions 'rwda' granted to role 'admin' on collection 'employees' # Пример использования разных прав: @@ -821,23 +821,23 @@ curl -X POST http://localhost:8080/api/trigger/company/employees/create \ ```sh # Создание триггера для логирования вставок -futriiS:~> create trigger employees audit_log AFTER_INSERT log +futriix:~> create trigger employees audit_log AFTER_INSERT log ✓ Trigger 'audit_log' created on collection 'employees' for event AFTER_INSERT # Создание триггера с автоматической установкой timestamp -futriiS:~> create trigger employees set_timestamp BEFORE_INSERT modify --set updated_at $$NOW +futriix:~> create trigger employees set_timestamp BEFORE_INSERT modify --set updated_at $$NOW ✓ Trigger 'set_timestamp' created on collection 'employees' for event BEFORE_INSERT # Создание триггера с условием (запрет удаления активных пользователей) -futriiS:~> create trigger employees protect_active BEFORE_DELETE abort --condition status eq active +futriix:~> create trigger employees protect_active BEFORE_DELETE abort --condition status eq active ✓ Trigger 'protect_active' created on collection 'employees' for event BEFORE_DELETE # Создание триггера с обновлением аудита -futriiS:~> create trigger employees audit BEFORE_UPDATE modify --set modified_by $$USER --set modified_at $$NOW +futriix:~> create trigger employees audit BEFORE_UPDATE modify --set modified_by $$USER --set modified_at $$NOW ✓ Trigger 'audit' created on collection 'employees' for event BEFORE_UPDATE # Просмотр всех триггеров коллекции -futriiS:~> show triggers employees +futriix:~> show triggers employees === Triggers on collection 'employees': === audit_log (AFTER_INSERT) - enabled [log] Operations: @@ -853,20 +853,20 @@ futriiS:~> show triggers employees - set: modified_at = $$NOW # Включение/отключение триггера -futriiS:~> disable trigger employees BEFORE_INSERT set_timestamp +futriix:~> disable trigger employees BEFORE_INSERT set_timestamp ✓ Trigger 'set_timestamp' disabled -futriiS:~> enable trigger employees BEFORE_INSERT set_timestamp +futriix:~> enable trigger employees BEFORE_INSERT set_timestamp ✓ Trigger 'set_timestamp' enabled # Просмотр лога выполнения триггеров -futriiS:~> trigger log +futriix:~> trigger log === Trigger Execution Log === [1] 2026-04-12 10:30:45 - Trigger: audit_log, Event: AFTER_INSERT, Collection: employees, Document: 550e8400-... [2] 2026-04-12 10:31:20 - Trigger: protect_active, Event: BEFORE_DELETE, Collection: employees, Document: 550e8400-... # Удаление триггера -futriiS:~> drop trigger employees BEFORE_INSERT set_timestamp +futriix:~> drop trigger employees BEFORE_INSERT set_timestamp ✓ Trigger 'set_timestamp' dropped from collection 'employees' ```

(К началу)

@@ -882,7 +882,7 @@ futriiS:~> drop trigger employees BEFORE_INSERT set_timestamp ```sh # Просмотр конфигурации сжатия -futriiS:~> compression config +futriix:~> compression config === Compression Configuration === Enabled: true Algorithm: snappy @@ -895,7 +895,7 @@ Available Algorithms: zstd - High compression ratio, slower # Просмотр статистики сжатия -futriiS:~> compression stats +futriix:~> compression stats === Compression Statistics === Total Documents: 1250 Compressed Documents: 890 @@ -908,12 +908,12 @@ futriiS:~> compression stats Min Size Threshold: 1 KB # Ручное сжатие коллекции -futriiS:~> compress collection employees +futriix:~> compress collection employees Compressing collection 'employees'... ✓ Compressed 45 documents in collection 'employees' # Просмотр информации о сжатии документа -futriiS:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000 +futriix:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000 === Compression Info for Document: 550e8400-e29b-41d4-a716-446655440000 === Compressed: true Ratio: 35.20% @@ -926,7 +926,7 @@ futriiS:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000 ## Графический интерфейс -В субд futriis для упрощения администрирования реализован **WUI (Web User Inerface) Веб-интерфейс**, с помощью которого через веб-браузер можно управлять субд, быстро просто и удобно. На фото ниже, приведён пример загруженного веб-интерфейса субд по умолчанию. +В субд futriix для упрощения администрирования реализован **WUI (Web User Inerface) Веб-интерфейс**, с помощью которого через веб-браузер можно управлять субд, быстро просто и удобно. На фото ниже, приведён пример загруженного веб-интерфейса субд по умолчанию. wui.png @@ -957,10 +957,10 @@ futriiS:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000 - [x] Исправить ошибки записи журнала логов (в журнал лога кроме текущего времени добавить текущий год) - [x] В веб-интерфейсе, слева от надписи "admin" в левой нижней части экрана, реализована возможность добавлять фото (маленького размера) - [x] В веб-интерфейсе "вшитые в исходный код" логин и пароль (admin; admin)-удалены -- [x] В веб-интерфейсе, реализована возможность смены логина и пароля для авторизации в нём, при этом логин и пароль (по умолчанию admin; admin) храни в скрытом файле ".credentials", расположенном в каталоге "futriis" +- [x] В веб-интерфейсе, реализована возможность смены логина и пароля для авторизации в нём, при этом логин и пароль (по умолчанию admin; admin) храни в скрытом файле ".credentials", расположенном в каталоге "futriix" - [x] В файле "/internal/compression/compression.go" заменена библиотека "lz4" на альтернативную, которая имеет стандартное версионирование на "GitHub" -- [x] В веб-интерфейс добавлена возможность читать файл логов "futriis.log", в котором отображаются все операции, выполненные в веб-интерфейсе за сеанс (например, создана база данных, или удалена коллекция), включая те операции, которые не были выполнены в виду какой-либо ошибки -- [x] В веб-интерфейсе, добавлена возможность добавления нового пользователя администратора, данные которого (логин и пароль) будут хранится в скрытом файле ".credentionals", расположенном в каталоге "futriis". +- [x] В веб-интерфейс добавлена возможность читать файл логов "futriix.log", в котором отображаются все операции, выполненные в веб-интерфейсе за сеанс (например, создана база данных, или удалена коллекция), включая те операции, которые не были выполнены в виду какой-либо ошибки +- [x] В веб-интерфейсе, добавлена возможность добавления нового пользователя администратора, данные которого (логин и пароль) будут хранится в скрытом файле ".credentionals", расположенном в каталоге "futriix". - [x] В веб-интерфейсе, добавлена возможность управлять плагинами (включать, отключать) - [x] Скрипты сборки "build.sh" и "vendor_build.sh" переписаны таким образом, чтобы проект не зависел от компилятора "gcc", т.е. напиши реализацию так чтобы его не нужно было устанавливать отдельно в операционной системе "OpenIndiana Hipster" - [x] Библиотека "raft-boltdb" заменена на встроенное файловое хранилище @@ -988,5 +988,3 @@ futriiS:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000 Григорий Сафронов - [E-mail](gvsafronov@yandex.ru)

(К началу)

- -