このプロジェクトについて

tinySQLはGoで書かれた組み込み可能なSQLデータベースエンジンで、データベース内部の学習、ローカルツール、テスト、ブラウザ/WASMアプリケーション、データベースサーバを運用せずにSQLを必要とする単一プロセスサービスに役立ちます。PostgreSQL、MySQL、またはクラスタ化された本番データベースのドロップイン代替ではありません。 ## はじめに Go 1.26.5以上が必要です。`go get github.com/SimonWaldherr/tinySQL@latest`でインストールします。インメモリデータベースを作成し、シンプルなGo APIでSQLを実行できます。`?`、`$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アプリへの組み込み: macOS、iOS、iPadOS向けのSwiftパッケージとApple XCFramework - AIツールまたはローカルRAGの使用: tinysql-mcp-serverとRAGガイド ## 機能 - **SQL**: DDL/DML、CTE、結合、グループ化、ウィンドウ、ビュー、トリガー、テーブル値関数、ストアドプロシージャ、ジョブ、および一般的なSQLite互換PRAGMA - **データ**: CSV/TSV、JSON/NDJSON、XML、YAML、Excel、GeoJSON、TopoJSON、KML、OSM XML、ルーティンググラフ、Shapefile、GeoPackage、MBTiles - **検索**: 全文検索、ベクトル検索、ハイブリッド検索、RAGヘルパー、正規表現、JSON、URL、HTML、日付、数学、ビットマップ、ハッシュ関数 - **デプロイ**: 純粋なGoの組み込みAPI、database/sqlドライバ、Rust/Python/Swift/Cバインディング、CLI、HTTP/gRPCサーバ、ブラウザ/WASMビルド、複数のストレージバックエンド ## GIS、ルーティング、タイル ジオメトリはGeoJSONまたは検証済みのGEOMETRYとして保存されます。測定、述語、編集、空間検索、コロプレス分類、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タグが必要) オプションのファイルサポートはビルドタグで構築されます: SQLite/GeoPackage/MBTiles用の`sqliteimport`、ESRI Shapefile/ZIPインポート用の`shapefile`。`tinysql_minimal`タグは、ブラウザWASMバンドルなどサイズに敏感な組み込み向けにオプション機能を削除し、シンボルを除去した状態でwasm-opt前にバンドルを約27.46 MBから15.56 MB(43%)に縮小します。 ## サービスと運用 serverはHTTPとgRPC API、オプションのTLSとベアラ認証、さらに非同期の読み取り専用レプリカを提供します。tinysqldはヘルス、スケジューラ、オプションのタイルエンドポイントを備えた耐久性のあるDBMSエントリポイントです。レプリケーションは非同期であり、自動フェイルオーバー、マルチプライマリ書き込み、分散トランザクションは実装されていません。 ## 制限事項 - 組み込みおよび単一プロセス。サーバは非同期のプライマリ/レプリカ読み取りのみを提供 - 複合主キー/外部キー、CHECK、対象を持つON CONFLICT DO UPDATE、SAVEPOINT、ATTACH/DETACH、VACUUM、部分インデックス、生成列、永続的なANNインデックスファイルは利用不可 - セカンダリインデックスは等値/プレフィックスシークと数値範囲を高速化。インデックス付きポイント列のbbox/半径クエリにはGEO_SEARCHが必要 - GISの妥当性は完全なトポロジ検証ではなく構造的。GEO_DISSOLVE/GEO_UNION_AGGにはクリーンで頂点が揃った隣接ポリゴンが必要 - RBACは粗く単一テーブル指向。暗号化はWALバックのモードやメタデータファイルをカバーしない tinySQLは主に教育用および組み込み用エンジンであり、パーサ、プランナ、エグゼキュータ、ストレージバックエンド、実用的な拡張を検査、テスト、適応しやすく保っています。