Об этом проекте
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 — прежде всего образовательный и встраиваемый движок, сохраняющий парсер, планировщик, исполнитель, бэкенды хранения и практические расширения простыми для изучения, тестирования и адаптации.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.