fluSQL-Автономный модуль для распределённой субд "futriix" добавляющий в неё функционал языка SQL, написанный на языке Rust
(К началу)
## Глоссарий * **База Данных(БД)** - это структурированное, организованное хранилище данных, которое позволяет удобно собирать, хранить, управлять и извлекать информацию. * **Система Управления Базами Данных(СУБД)** - это программное обеспечение, которое позволяет создавать, управлять и взаимодействовать с базами данных * **Мультимодельная СУБД** - это СУБД, которая объединяет в себе поддержку нескольких моделей данных (реляционной, документной, графовой, ключ-значение и др.) в рамках единого интегрированного ядра. * **Резидентная СУБД** - это СУБД, которая работает непрерывно в оперативной памяти (RAM). * **Инстанс** - это запущенный экземляр базы данных. * **Узел (хост,нода,шард)** - это отдельный сервер (физический или виртуальный), который является частью кластера или распределенной системы и выполняет часть общей работы. * **Слайс (от англ. "slice"-слой)** - это логический и физически изолированный фрагмент коллекции документов, полученный в результате горизонтального партиционирования (шардирования) и размещенный на определенном узле кластера с целью масштабирования производительности и объема данных. * **Репликасет** - это группа серверов СУБД, объединенных в отказоустойчивую конфигурацию, где один узел выполняет роль первичного (принимающего операции записи), а один или несколько других - роль вторичных (синхронизирующих свои данные с первичным и обслуживающих чтение), с автоматическим переизбранием первичного узла в случае его сбоя. * **Временные ряды (time series)** - это это упорядоченная во времени последовательность данных, собранная в регулярные промежутки времени из какого-либо источниика (цены на акции, данные температуры, объёмы продаж и.т.д.). * **OLTP (Online Transactional Processing-Онлайн обработка транзакций)**- это технология обработки транзакций в режиме реального времени. Её основная задача заключается в обеспечении быстрого и надёжного выполнения операций, которые происходят ежесекундно в бизнесе. Они обеспечивают быстрое выполнение операций вставки, обновления и удаления данных, поддерживая целостность и надежность транзакций. * **OLAP (Online Analytical Processing - Оперативная аналитическая обработка)** — это технология, которая работает с историческими массивами информации, извлекая из них закономерности и производя анализ больших объемов данных, поддерживает многоразмерные запросы и сложные аналитические операции. Данная технология оптимизирована для выполнения сложных запросов и предоставления сводной информации для принятия управленческих решений. * **HTAP (Hybrid Transactional and Analytical Processing - Гибридная транзакционно-аналитическая обработка)**- это технология, которая заключаются в эффективном совмещении операционных и аналитических запросов, т.е. классов OLTP и OLAP. * **Кластер** - это группа компьютеров, объединённых высокоскоростными каналами связи для решения сложных вычислительных задач и представляющая с точки зрения пользователя группу серверов, объединенных для работы как единая система. * **WUI (от англ. Web-User-Interface "веб интерфейс пользователя")** - это термин проекта futriix, означающий веб-интерфейс (интерфейс работающий в веб-браузере) * **Сервер-приложений (англ. application-server)** - это программное обеспечение, которое обеспечивает выполнение бизнес-логики и обработку запросов от клиентов (например, веб-браузеров или мобильных приложений). Он служит платформой для развертывания и управления приложениями, имея встроенные интепретаторы и/или компиляторы популярных языков программирования (php,go,python), что обеспечивает взаимодействие между пользователями, базами данных и другими системами. * **REPL (от англ. read-eval-print loop — цикл "чтение — вычисление — вывод")** - это объединённые в одном приложении сервер и клиент для работы со встроенным приложением, применимо к данному проекту- к встроенной субд "futriix" * **workflow (англ. workflow — «поток работы»)** — это принцип организации рабочих процессов, в соответствии с которым повторяющиеся задачи представлены как последовательность стандартных шагов. * **wait-free (дословно с англ. wait-free — «свободный от ожидания»)**-класс неблокирующих алгоритмов, в которых каждая операция должна завершаться за конечное число шагов независимо от активности других потоков. * **CA (англ. Certificate Authority - Центры Сертификации)** - это организации, которые выдают доверенные криптографические сертификаты. * Команды, выполняемые с привилегиями суперпользователя (root), отмечены символом приглашения **«#»** * Команды, выполняемые с правами обычного пользователя(user), отмечены символом приглашения **«$»**(К началу)
## Лицензия Проект распространяется под 2-пунктной лицензией BSD. Подробнсти в файле LICENSE.txt. Эта лицензия является одной из самых демократичных лицензий свободного программного обеспечения. Она позволяет использовать, изменять и распространять код в коммерческих целях без каких-либо ограничений, за исключением сохранения уведомления об авторских правах. В том числе, Вы можете использовать fluSQL в своих коммерческих продуктах, приложениях или сервисах, не беспокоясь о каких-либо юридических ограничениях, связанных с лицензией. Все дополнительное программное обеспечение (включая модули на языке lua, тесты) предоставляются "как есть", без гарантий и обязательств со стороны разработчиков. Разработчики не несут ответственности за прямой или косвенный ущерб, вызванный использованием открытого кода Futriix и futriix или технических решений, использующих этот код.(К началу)
## Системные требования Данный раздел описывает системные требования, предъявляемые как к аппаратному, так и к программному обеспечению, на котором планируется запускать `futriix` * Тип процессора: Intel 86x * Разрядность процессора: 64-бит * ОЗУ: от 4 Гб и выше * Операционная система: **Linux Fedora** (**рекомендуемая**), Linux семейства Debian (Ubintu, Linux Mint, Linux MX) > [!WARNING] > **Futriix может быть скомпилирован для следующих операционных систем: `OSX`, `Open Indiana`, `FreeBSD`, но сборка для этих операционных систем не проводилась!!!**(К началу)
## Структура модулей ```txt src/ ├── core/ # Ядро СУБД │ ├── database.rs # Управление базами данных │ ├── table.rs # Управление таблицами │ ├── index.rs # Индексы │ └── column_family.rs # Колоночное хранение ├── parser/ # Парсер SQL ├── wal/ # Write-Ahead Log ├── mvcc/ # MVCC движок ├── lua/ # Lua интерпретатор ├── cli/ # Командный интерфейс └── utils/ # Вспомогательные модули ```(К началу)
## Подготовка **Для операционных систем семейства Debian** выполните следующие шаги: * Обновляем индексы репозиториев (Без этой команды, установщик может не найти пакеты или использовать старые версии): ```sh # apt update ``` * Устанавливаем необходимые пакеты: ```sh # apt install curl build-essential git wget ``` * **Устанавливаем язык программирования Rust** ```sh # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` > [!WARNING] > **Если используя команду выше установить язык Rust не удалось, тогда устанавливаем язык Rust альтернативным способом, указанном ниже:** ```sh $ sudo -s # apt update # apt install rustup && rustup default stable # rustup update # rustc --version **Если всё сделано правильно то в терминале должен появиться ответ: rustc 1.92.0 (ded5c06cf 2025-12-08)** ``` * **Для операционных систем семейства Red Hat (Fedora, Aurora)** выполните следующие шаги: * Обновляем индексы репозиториев (Без этой команды, установщик может не найти пакеты или использовать старые версии): ```sh # dnf update ``` * Устанавливаем необходимые пакеты: ```sh # dnf install curl build-essential git wget ``` * **Устанавливаем язык программирования Rust** ```sh # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` ## Компиляция ```sh # Клонирование репозитория git clone https://github.com/yourusername/flusql.git cd flusql # Сборка в режиме релиза (оптимизированная) cargo build --release # Запуск тестов cargo test ```(К началу)
## Использование **Запуск интерактивного интефейса** ```sh $ ./flusql ``` **Пример сессии** ```sql Добро пожаловать в flusql! Введите HELP для справки. flusql> CREATE DATABASE testdb; База данных 'testdb' создана flusql> USE testdb; Используется база данных 'testdb' flusql> CREATE TABLE users (id INT, name TEXT, age INT); Таблица 'users' создана flusql> INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30); Запись вставлена с ID: 1 flusql> SELECT * FROM users; Найдено 1 записей id | name | age --------------- 1 | Alice | 30 flusql> lua-mode Вход в Lua режим. Введите 'exit' для выхода lua> print("Hello from Lua!") Hello from Lua! ```(К началу)
## Основные команды **Управление базами данных** ```sql CREATE DATABASE mydb; USE mydb; SHOW DATABASES; DROP DATABASE mydb; ``` **Управление таблицами** ```sql CREATE TABLE users ( id INT PRIMARY KEY, name TEXT NOT NULL, age INT, email TEXT UNIQUE ); ALTER TABLE users ADD COLUMN phone TEXT; DROP TABLE users; ``` **Операции с данными** ```sql -- Вставка INSERT INTO users (id, name, age) VALUES (1, 'Алиса', 30); -- Выборка SELECT * FROM users WHERE age > 25 ORDER BY name LIMIT 10; -- Обновление UPDATE users SET age = 31 WHERE id = 1; -- Удаление DELETE FROM users WHERE age < 18; ```(К началу)
## Поддерживаемые расширенные возможности SQL * JOIN операции: LEFT JOIN, INNER JOIN * Агрегатные функции: GROUP BY, ORDER BY * Ограничения: FOREIGN KEY, CHECK, UNIQUE * Индексы: создание и удаление индексов * Триггеры: BEFORE/AFTER INSERT/UPDATE/DELETE(К началу)
## Lua-интеграция ```sql lua-mode -- Вход в режим Lua ``` ```lua -- Выполнение SQL из Lua local result = execute_sql("SELECT * FROM users") print("Результат:", result) -- Работа с данными local data = query_data("SELECT name, age FROM users") for i, row in ipairs(data) do print("Строка", i, ":", table.concat(row, ", ")) end ``` ## Импорт и экспорт данных из/в субд ```sql EXPORT users TO '/path/to/users.csv'; IMPORT INTO users FROM '/path/to/data.csv'; ``` ## Программное использование ```rust use flusql::{Database, Config}; // Создание конфигурации let config = Config::default(); // Создание базы данных let mut db = Database::create("mydb", &config)?; // Создание таблицы use flusql::core::{TableSchema, ColumnSchema, DataType}; let schema = TableSchema { columns: vec![ ColumnSchema { name: "id".to_string(), data_type: DataType::Integer, nullable: false, unique: true, }, ColumnSchema { name: "name".to_string(), data_type: DataType::Text, nullable: false, unique: false, }, ], primary_key: Some("id".to_string()), indexes: vec![], foreign_keys: vec![], checks: vec![], }; db.create_table("users", schema)?; ```(К началу)
## Тестирование(К началу)
### Оптимизации * Memory-mapped файлы: для WAL и больших таблиц * Пакетная обработка: группировка операций записи * Кэширование запросов: повторное использование планов выполнения * Векторизованные операции: SIMD для агрегатных функций ## Конфигурация **Файл конфигурации `config.toml`** ```sh # Путь к директории с базами данных data_dir = "./data" # Максимальный размер лог-файла в MB max_log_size_mb = 100 # Включить журналирование enable_logging = true # Автоматическое создание индексов auto_index = true # Размер страницы памяти в KB page_size_kb = 4 ``` ## Переменные окружения ```sh export FLUSQL_DATA_DIR="/var/lib/flusql" export FLUSQL_LOG_LEVEL="info" export FLUSQL_MAX_MEMORY="2GB" ```(К началу)
## Сферы применения **Бизнес-приложения** * Финансовые системы: обработка транзакций в реальном времени * Логистика и трекинг: отслеживание перемещений объектов * CRM системы: управление клиентской базой **IoT и телеметрия** * Сбор данных с датчиков: хранение временных рядов * Аналитика в реальном времени: обработка потоковых данных * Мониторинг систем: сбор и анализ метрик **Игровая индустрия** * Игровые профили: хранение данных игроков * Аналитика игрового процесса: сбор статистики * Социальные функции: чаты, друзья, достижения **Научные исследования** * Обработка экспериментальных данных: хранение и анализ * Машинное обучение: подготовка обучающих выборок * Статистический анализ: агрегация и обработка данных **Мобильные приложения** * Локальное хранение: автономная работа приложения * Синхронизация данных: фоновая обработка * Кэширование: ускорение работы приложения(К началу)
## Документация API **Основные типы** ```rust // База данных pub struct Database; // Таблица pub struct Table; // Схема таблицы pub struct TableSchema; // Значение данных pub enum Value { Integer(i64), Text(String), Boolean(bool), Float(f64), Null, } // Парсер SQL pub struct SqlParser; ```(К началу)
**Обработка ошибок** ```rust use flusql::{DatabaseError, TableError}; match result { Ok(data) => process_data(data), Err(DatabaseError::NotFound(name)) => { eprintln!("База данных '{}' не найдена", name); } Err(DatabaseError::IoError(e)) => { eprintln!("Ошибка ввода-вывода: {}", e); } Err(e) => { eprintln!("Неизвестная ошибка: {}", e); } } ``` ```sh -- OLTP-операция: быстрая транзакция Futriix_db.update("users", "user123", '{"balance": 100}') -- OLAP-операция: аналитический запрос local analytics = Futriix_db.query("transactions", '{"date": {"$gt": "2024-01-01"}}') ```(К началу)
## Дорожная карта - [x] Реализовать базовые операторы CRUD SQL на одном узле - [x] Реализовать поддержку триггеров (обратных вызовов) - [x] Реализовать поддержку многопоточности - [x] Реализовать неблокирующие чтение/запись - [x] Реализовать мульти-мастер асинхронную репликацию через файл конфигурации - [x] Реализовать логирование - [x] Реализовать поддержку синхронной мастер-мастер репликации - [x] Реализовать поддержку кластеризации согласно паттерну "Centralized Coordinator" - [x] Реализовать поддержку первичных индексов - [x] Реализовать базовую поддержку транзакций - [x] Реализовать поддержку первичных и вторичных индексов - [ ] Добавить механизм сторонних модулей на языке lua, расширяющих базовый функционал сервера - [x] Добавить в каждую таблицу временную метку-"timestamp" (текущую дату) - [x] Заменить диалект SQL на диалект SQL-PostgreSQL - [x] Переписать асинхронную мастер-мастер репликацию на синхронную мастер-мастер репликацию - [ ] Реализовать поддержку базового (на нескольких узлах) языка SQL - [ ] Реализовать графический веб-интерфейс для управления кластером - [ ] Реализовать аппаратную поддержку платформы "RasberryPi" См. [Открытые проблемы](https://source.futriix.ru/gvsafronov/futriixw/issues) полный список предлагаемых функций (и известных проблем).(К началу)
## Контакты Григорий Сафронов - [E-mail](gvsafronov@yandex.ru)(К началу)