GlueSQL: SQL-клей для ваших данных
Когда последний раз вам приходилось писать сложные конвертеры между SQL и NoSQL? Или мучиться с JOIN между разными типами хранилищ? GlueSQL предлагает элегантное решение — универсальный SQL-интерфейс поверх любых данных.
Что склеивает GlueSQL?
GlueSQL — это Rust-библиотека, которая:
- Добавляет SQL-интерфейс к любым данным: от JSON-файлов до IndexedDB
- Поддерживает как структурированные, так и неструктурированные данные
- Работает в браузере через WebAssembly
- Позволяет делать JOIN между разными хранилищами
Главная фишка — GlueSQL не требует заранее определённой схемы. Вы можете работать с JSON-документами как с реляционными таблицами и даже соединять их в запросах!
// Пример из документации:
let storage = MemoryStorage::default();
let mut glue = Glue::new(storage);
let payloads = glue.execute("SELECT * FROM Foo;").await.unwrap();
5 причин попробовать GlueSQL
-
SQL для NoSQL Забудьте про сложные ORM и конвертеры. Делайте SELECT, JOIN и GROUP BY напрямую из MongoDB или JSON-файлов.
-
Браузерная аналитика Используйте localStorage или IndexedDB как полноценную SQL-базу прямо в браузере. Отлично подходит для аналитических панелей.
-
Гибкие схемы Работайте с полуструктурированными данными без головной боли. GlueSQL автоматически адаптируется к вашим JSON-схемам.
-
Git как база данных Встроенная поддержка Git Storage позволяет версионировать данные и запросы.
-
Кросс-платформенность Один код работает в Rust, JavaScript (через WASM) и скоро в других языках.
Как это работает внутри?
GlueSQL состоит из трёх основных компонентов:
- Парсер SQL (на основе sqlparser-rs)
- Планировщик запросов
- Абстрактный слой хранилища
Сердце системы — трейты Store и StoreMut, которые вы можете реализовать для своего хранилища. Тест-сьюит GlueSQL автоматически проверит вашу реализацию на соответствие SQL-стандартам.
Необычные кейсы использования
- Веб-приложения: Замените сложные манипуляции с IndexedDB на чистый SQL
- Анализ логов: Загрузите JSONL-файлы и анализируйте их без ETL
- Прототипирование: Быстрое подключение к CSV/JSON вместо настройки PostgreSQL
- Гибридные хранилища: JOIN между данными в памяти и на диске
-- Пример из документации: JOIN структурированной и JSON-таблицы
CREATE TABLE Names (id INTEGER, name TEXT);
INSERT INTO Names VALUES (1, 'glue'), (2, 'sql');
CREATE TABLE Logs;
INSERT INTO Logs VALUES
('{ "id": 1, "value": 30 }'),
('{ "id": 2, "rate": 3.0, "list": [1, 2, 3] }');
SELECT * FROM Names JOIN Logs ON Names.id = Logs.id;
Кому особенно пригодится?
- Fullstack-разработчикам, уставшим от ORM
- Аналитикам, работающим с разнородными данными
- Rust-энтузиастам, ищущим интересные проекты для контрибьютинга
- Разработчикам встраиваемых систем (поддержка Sled и Redb)
GlueSQL — это не просто ещё одна SQL-библиотека. Это новый взгляд на то, как мы можем работать с данными, стирая границы между SQL и NoSQL. Если вы хотя бы раз проклинали несовместимость разных хранилищ — самое время попробовать этот "клей" на практике.
Ссылки для изучения:
P.S. Проект активно развивается и ждёт контрибьюторов — тест-покрытие 99% делает участие комфортным даже для новичков в Rust.
