2026-01-08 18:30:33 +03:00
2026-01-08 18:30:33 +03:00
2026-01-08 20:55:02 +00:00
2026-01-08 18:30:33 +03:00
2026-01-08 18:30:33 +03:00
2026-01-08 15:40:46 +00:00
2026-01-08 18:30:33 +03:00
2026-01-08 15:34:47 +00:00
2026-01-08 18:30:33 +03:00
2026-01-08 18:30:33 +03:00


Logo.png

fluSQL

fluSQL-Автономный модуль для распределённой субд "futriix" добавляющий в неё функционал языка SQL, написанный на языке Rust


Краткая документация проекта fluSQL


Содержание
  1. О проекте
  2. Глоссарий
  3. Лицензия
  4. Системные требования
  5. Структура модулей
  6. Подготовка
  7. Компиляция
  8. Документация API
  9. Дорожная карта
  10. Контакты

О проекте

flusql — это высокопроизводительная встраиваемая SQL СУБД, разработанная на языке Rust с архитектурой wait-free. Система предназначена для приложений, требующих максимальной параллельности и минимальных задержек при работе с данными.

  • Wait-free архитектура: полное отсутствие блокировок при операциях чтения
  • Много-версионное управление параллелизмом (MVCC): изолированные транзакции без блокировок
  • Колоночное хранение данных: оптимизировано для аналитических запросов
  • Встроенный Lua интерпретатор: расширяемость через пользовательские скрипты
  • Полноценный WAL (Write-Ahead Log): гарантии сохранности данных
  • Поддержка ACID транзакций: надежность и согласованность

Архитектура-Wait-Free подход, что предоставляет следующие преимущества:

  • Отсутствие блокировок: использование атомарных операций вместо Mutex/RwLock
  • Сегментированные очереди: асинхронная обработка операций записи
  • MVCC (Multi-Version Concurrency Control): параллельное чтение без блокировок
  • Кэширование с контрольными точками: периодическая синхронизация данных
  • Колоночное хранение
  • Семейство столбцов: каждый столбец хранится отдельно
  • Оптимизация для аналитики: быстрые агрегатные операции
  • Эффективное сжатие: повторяющиеся значения хранятся один раз
  • Векторизованная обработка: пакетная обработка данных

(К началу)

Глоссарий

  • База Данных(БД) - это структурированное, организованное хранилище данных, которое позволяет удобно собирать, хранить, управлять и извлекать информацию.
  • Система Управления Базами Данных(СУБД) - это программное обеспечение, которое позволяет создавать, управлять и взаимодействовать с базами данных
  • Мультимодельная СУБД - это СУБД, которая объединяет в себе поддержку нескольких моделей данных (реляционной, документной, графовой, ключ-значение и др.) в рамках единого интегрированного ядра.
  • Резидентная СУБД - это СУБД, которая работает непрерывно в оперативной памяти (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, но сборка для этих операционных систем не проводилась!!!

(К началу)

Структура модулей

src/
├── core/           # Ядро СУБД
│   ├── database.rs # Управление базами данных
│   ├── table.rs    # Управление таблицами
│   ├── index.rs    # Индексы
│   └── column_family.rs # Колоночное хранение
├── parser/         # Парсер SQL
├── wal/           # Write-Ahead Log
├── mvcc/          # MVCC движок
├── lua/           # Lua интерпретатор
├── cli/           # Командный интерфейс
└── utils/         # Вспомогательные модули

(К началу)

Подготовка

Для операционных систем семейства Debian выполните следующие шаги:

  • Обновляем индексы репозиториев (Без этой команды, установщик может не найти пакеты или использовать старые версии):

     # apt update
    
  • Устанавливаем необходимые пакеты:

     # apt install curl build-essential git wget
    
  • Устанавливаем язык программирования Rust

    # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

Warning

Если используя команду выше установить язык Rust не удалось, тогда устанавливаем язык Rust альтернативным способом, указанном ниже:

$ 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) выполните следующие шаги:

  • Обновляем индексы репозиториев (Без этой команды, установщик может не найти пакеты или использовать старые версии):

     # dnf update
    
  • Устанавливаем необходимые пакеты:

     # dnf install curl build-essential git wget
    
  • Устанавливаем язык программирования Rust

    # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

Компиляция

# Клонирование репозитория
git clone https://github.com/yourusername/flusql.git
cd flusql

# Сборка в режиме релиза (оптимизированная)
cargo build --release

# Запуск тестов
cargo test

(К началу)

Использование

Запуск интерактивного интефейса

$ ./flusql

Пример сессии

Добро пожаловать в 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!

(К началу)

Основные команды

Управление базами данных

CREATE DATABASE mydb;
USE mydb;
SHOW DATABASES;
DROP DATABASE mydb;

Управление таблицами

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;

Операции с данными

-- Вставка
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-интеграция

lua-mode  -- Вход в режим 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

Импорт и экспорт данных из/в субд

EXPORT users TO '/path/to/users.csv';
IMPORT INTO users FROM '/path/to/data.csv';

Программное использование

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

# Путь к директории с базами данных
data_dir = "./data"

# Максимальный размер лог-файла в MB
max_log_size_mb = 100

# Включить журналирование
enable_logging = true

# Автоматическое создание индексов
auto_index = true

# Размер страницы памяти в KB
page_size_kb = 4

Переменные окружения

export FLUSQL_DATA_DIR="/var/lib/flusql"
export FLUSQL_LOG_LEVEL="info"
export FLUSQL_MAX_MEMORY="2GB"

(К началу)

Сферы применения

Бизнес-приложения

  • Финансовые системы: обработка транзакций в реальном времени
  • Логистика и трекинг: отслеживание перемещений объектов
  • CRM системы: управление клиентской базой

IoT и телеметрия

  • Сбор данных с датчиков: хранение временных рядов
  • Аналитика в реальном времени: обработка потоковых данных
  • Мониторинг систем: сбор и анализ метрик

Игровая индустрия

  • Игровые профили: хранение данных игроков
  • Аналитика игрового процесса: сбор статистики
  • Социальные функции: чаты, друзья, достижения

Научные исследования

  • Обработка экспериментальных данных: хранение и анализ
  • Машинное обучение: подготовка обучающих выборок
  • Статистический анализ: агрегация и обработка данных

Мобильные приложения

  • Локальное хранение: автономная работа приложения
  • Синхронизация данных: фоновая обработка
  • Кэширование: ускорение работы приложения

(К началу)

Документация API

Основные типы

// База данных
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;

(К началу)

Обработка ошибок

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);
    }
}
-- OLTP-операция: быстрая транзакция
Futriix_db.update("users", "user123", '{"balance": 100}')

-- OLAP-операция: аналитический запрос  
local analytics = Futriix_db.query("transactions", '{"date": {"$gt": "2024-01-01"}}')

(К началу)

Дорожная карта

  • Реализовать базовые операторы CRUD SQL на одном узле
  • Реализовать поддержку триггеров (обратных вызовов)
  • Реализовать поддержку многопоточности
  • Реализовать неблокирующие чтение/запись
  • Реализовать мульти-мастер асинхронную репликацию через файл конфигурации
  • Реализовать логирование
  • Реализовать поддержку синхронной мастер-мастер репликации
  • Реализовать поддержку кластеризации согласно паттерну "Centralized Coordinator"
  • Реализовать поддержку первичных индексов
  • Реализовать базовую поддержку транзакций
  • Реализовать поддержку первичных и вторичных индексов
  • Добавить механизм сторонних модулей на языке lua, расширяющих базовый функционал сервера
  • Добавить в каждую таблицу временную метку-"timestamp" (текущую дату)
  • Заменить диалект SQL на диалект SQL-PostgreSQL
  • Переписать асинхронную мастер-мастер репликацию на синхронную мастер-мастер репликацию
  • Реализовать поддержку базового (на нескольких узлах) языка SQL
  • Реализовать графический веб-интерфейс для управления кластером
  • Реализовать аппаратную поддержку платформы "RasberryPi"

См. Открытые проблемы полный список предлагаемых функций (и известных проблем).

(К началу)

Контакты

Григорий Сафронов - E-mail

(К началу)

Description
Автономный модуль, реализующий функционал SQL в субд futriix
https://futriix.ru Readme BSD-2-Clause 257 KiB
Languages
Rust 97%
Lua 3%