Об этом проекте

tinySQL — это встраиваемый движок SQL-базы данных, написанный на Go, полезный для изучения внутреннего устройства баз данных, локальных инструментов, тестов, браузерных/WASM-приложений и однопроцессных сервисов, которым нужен SQL без эксплуатации сервера базы данных. Это не замена PostgreSQL, MySQL или кластерных продакшен-баз данных «один в один». ## Начало работы Требуется Go 1.26.5+. Установка: `go get github.com/SimonWaldherr/tinySQL@latest`. Создайте базу данных в памяти и выполняйте SQL через простой Go API, включая привязку параметров с плейсхолдерами `?`, `$1` или `:1`. Также доступны драйвер database/sql, потоковая передача, колоночные результаты, транзакции и конструктор запросов. Тот же движок встраивается в другие языки через единый C ABI, с привязками для Rust, Python, Swift и C. Примеры на Python и Rust показывают создание таблиц, вставку строк и запросы с привязанными параметрами. ## Рабочие процессы - Интерактивное исследование: demo, repl или tinysql CLI - Файлы запросов или миграция данных: query_files, fsql или migrate - Встраивание локального SQL-сервиса: server или tinysqld - Создание браузерных приложений: query_files_wasm, wasm_browser или wasm_node - Встраивание в приложения Swift/Xcode: пакет Swift и Apple XCFramework для macOS, iOS, iPadOS - Использование AI-инструментов или локального RAG: tinysql-mcp-server и руководство по RAG ## Возможности - **SQL**: DDL/DML, CTE, соединения, группировка, окна, представления, триггеры, табличные функции, хранимые процедуры, задания и распространённые PRAGMA, совместимые с SQLite - **Данные**: CSV/TSV, JSON/NDJSON, XML, YAML, Excel, GeoJSON, TopoJSON, KML, OSM XML, графы маршрутизации, Shapefiles, GeoPackage, MBTiles - **Поиск**: полнотекстовый, векторный, гибридный поиск, помощники RAG, регулярные выражения, JSON, URL, HTML, дата, математика, битовая карта и хеш-функции - **Развёртывание**: чистый Go встраиваемый API, драйвер database/sql, привязки Rust/Python/Swift/C, CLI, HTTP/gRPC-сервер, браузерные/WASM-сборки, несколько бэкендов хранения ## GIS, маршрутизация и тайлы Геометрия хранится как GeoJSON или проверенная GEOMETRY. Включает измерение, предикаты, редактирование, пространственный поиск, классификацию choropleth, WKT/WKB, geohash и помощники Web Mercator. Функции маршрутизации выполняют Dijkstra или управляемый координатами A* по обычным таблицам рёбер. Функции тайлов поддерживают рабочие процессы Web Mercator и OGC TileMatrix. ## Извлечение и RAG Векторное, полнотекстовое и гибридное извлечение можно комбинировать с фильтрами по метаданным и переранжированием. RAG_WARM и ROUTE_WARM подготавливают производные структуры обслуживания до трафика. ## Режимы хранения - ModeMemory: тесты, браузер/WASM, временные данные - ModeWAL: таблицы в памяти с восстановлением через журнал упреждающей записи - ModeDisk: GOB-файлы по таблицам с ленивой загрузкой - ModeJSON: читаемый человеком, диффабельный JSON по таблицам - ModeIndex/ModeHybrid: таблицы на диске с ограниченным кешированием - ModePagedIndex: крупные поиски по равенству, например MBTiles - ModeSQLite: файл .sqlite, совместимый с инструментами SQLite (требуется тег sqliteimport) Опциональная поддержка файлов собирается с тегами сборки: `sqliteimport` для SQLite/GeoPackage/MBTiles, `shapefile` для импорта ESRI Shapefile/ZIP. Тег `tinysql_minimal` убирает опциональные функции для чувствительных к размеру встраиваний, таких как браузерные WASM-бандлы, уменьшая бандл примерно с 27,46 МБ до 15,56 МБ (43%) до wasm-opt со stripped-символами. ## Сервисы и эксплуатация server предоставляет HTTP и gRPC API, опциональные TLS и bearer-аутентификацию, а также асинхронные реплики только для чтения. tinysqld — это точка входа для долговечной СУБД с проверкой работоспособности, планировщиком и опциональными конечными точками тайлов. Репликация асинхронная; автоматическое переключение при сбое, многопервичная запись и распределённые транзакции не реализованы. ## Ограничения - Встраиваемый и однопроцессный; сервер предлагает только асинхронное чтение с первичного/реплик - Составные первичные/внешние ключи, CHECK, ON CONFLICT DO UPDATE с целью, SAVEPOINT, ATTACH/DETACH, VACUUM, частичные индексы, генерируемые столбцы и постоянные файлы ANN-индексов недоступны - Вторичные индексы ускоряют поиск по равенству/префиксу и числовые диапазоны; для индексированных запросов bbox/radius по столбцу точек нужен GEO_SEARCH - Валидность GIS структурная, а не полная топологическая проверка; GEO_DISSOLVE/GEO_UNION_AGG требуют чистых, выровненных по вершинам смежных полигонов - RBAC грубый и ориентирован на одну таблицу; шифрование не покрывает режимы с WAL или файлы метаданных tinySQL — прежде всего образовательный и встраиваемый движок, сохраняющий парсер, планировщик, исполнитель, бэкенды хранения и практические расширения простыми для изучения, тестирования и адаптации.