プログラミング
BriskDB
要約
BriskDBは、標準的なSQLiteファイルを並列書き込み、PostgreSQL互換性、HTTPアクセス、および組み込みRust/Python APIを備えた単一のデータベースに変換するプロジェクトです。SQLiteの堅牢なストレージエンジンとツールを維持しつつ、ルーティングレイヤー、シャードセーフID、クロスシャードインデックス、プロトコル、運用上のガードレールを追加します。これは、SQLiteのシンプルさとスケーラビリティの向上を両立させることを目指したアルファ版のデータベースサービスです。
全文翻訳
BriskDB SQLiteファイル。1つのシャーディングされたデータベース。
BriskDBは、通常のSQLiteファイルを、並列書き込み、PostgreSQL互換性、HTTPアクセス、および組み込みRust/Python APIを備えた単一のデータベースに変換します。SQLiteの証明されたストレージエンジンとツールを維持しつつ、BriskDBはルーティングレイヤー、シャードセーフID、クロスシャードインデックス、プロトコル、および運用上のガードレールを追加します。
有用な部分
意味すること
並列SQLite書き込み
独立したシャードファイルは、独立したWALライターロックを持っています。
既存のクライアントを使用する
PostgreSQLとHTTPは現在利用可能。MongoDBとMySQLは次期予定です。
組み込みまたはサービスとして実行
同じRustエンジンが、バイナリ、Pythonホイール、およびRustクレートをサポートします。
検査可能なファイルを保持する
各データシャードは通常のSQLiteデータベースのままです。SQLiteのフォークはありません。
コンパイラなしで試す
アルファ版をダウンロードする
データブラウザを開く
MongoDBとMySQLをフォローする
重要
BriskDBはアルファ版であり、本番環境対応のデータベースサービスではありません。境界線は明確にされており、たとえ好ましくない結果であっても測定された結果が公開されています。
開発者が気にするかもしれない理由
SQLiteフォークなし。各シャードは通常のSQLite WALデータベースであり、通常のツールで検査できます。
中央書き込みロックなし。異なるシャードへの書き込みは異なるWALを使用し、並列で進行できます。
行ごとの中央ID書き込みなし。ネイティブ範囲およびhi/lo割り当ては、シャードおよびプロセス全体で衝突のない生成IDを提供します。
安全なクロスシャードプルーニング。グローバル一意性は権威があり、非同期インデックスは検証、ウォーターマーク、ブルームフィルタ、min/maxサマリーを使用するため、最適化によって行がサイレントに隠されることはありません。
どこでも同じエンジン。PostgreSQL、HTTP、Rust、Pythonはルーティング、制限、キャンセル、エラー、およびストレージの動作を共有します。
操作は可視です。/health、/metrics、管理JSON、およびRustステータスレポートは、ラグ、修復、再構築、競合、およびアウトボック圧力などを公開します。
フローチャートの1つのエンジン、多くの方法
LR
サブグラフ
クライアント
WEB[ブラウザ + HTTP]
PG[PostgreSQLクライアント]
MONGO[MongoDBクライアント・計画中]
MYSQ[MySQLクライアント・計画中]
RUST[Rust組み込み]
PY[Python組み込み]
エンド
WEB --> エンジン
PG --> エンジン
MONGO -.-> エンジン
MYSQ -.-> エンジン
RUST --> エンジン
PY --> エンジン
エンジン[プロトコルニュートラルRustエンジン]
--> ルーター[4,096仮想バケット]
ルーター --> S0[(SQLite WAL・シャード0)]
ルーター --> S1[(SQLite WAL・シャード1)]
ルーター --> S2[(SQLite WAL・シャード2)]
ルーター --> SN[(SQLite WAL・シャードN)]
ロード中
プロトコルアダプターはデータベースセマンティクスを所有しません。ルーティング、制限、キャンセル、値、セッション、および実行は共有Rustエンジン内に存在し、将来的に他のプロトコルやストレージアダプターの余地を残しています。
論理データベース全体をブラウズする
BriskDBは、/adminで応答性の高い読み取り専用データブラウザを提供します。これは、他のクライアントと同じバウンドされたHTTPエンジンパスを使用し、シャーディングされた行を単一の論理ビューに結合し、グローバルテーブルを一度読み取り、大きな整数値を保持します。
現在のローカルアルファ版の場合:http://127.0.0.1:7654/admin
ユーザー名: admin
パスワード: admin
一時的な認証情報は開発上の便宜のためであり、セキュリティ境界ではありません。そのため、サーバーは現在、ループバック以外のHTTPアドレスを拒否しています。
珍しい点:シャードセーフ生成ID
BriskDBには、シャーディングされたテーブル用の2つの生成ID設計があります。native_range_v1は、各シャードに非重複の正の64ビット範囲を割り当てます。SQLite自身のINTEGER PRIMARY KEY AUTOINCREMENTが、挿入される各行に対して中央書き込みなしで、ローカルで実際の割り当てを実行します。hilo_v1はマニフェストから4,096個のIDブロックを永続的にリースし、メモリ内で割り当て、各IDをハッシュルーティングします。クラッシュによってギャップが生じる可能性がありますが、IDが再利用されることはありません。両方のポリシーはマニフェストでバージョン管理されています。生成キーの実行はまだ実験的であり、オプトインです。正確な契約はGenerated keysにあります。
現在動作するもの
機能
アルファステータス
独立したSQLite WALファイル über の耐久性のある仮想バケットルーティング
動作中
正確なキーのルーティングとバウンドされた散布/収集読み取り
動作中
HTTPクエリ/書き込みAPIと管理データブラウザ
動作中、ループバックのみ
PostgreSQLワイヤープロトコル
TLS/SCRAM、バックプレッシャード行ストリーミング、SQLite割り込みキャンセル、テキスト/バイナリCRUD、実際のシングルシャードトランザクション、およびライブpsql/tokio-postgres/psycopg/SQLAlchemyマトリックス
オフラインインポート
標準SQLiteデータベースから
動作中
ネイティブ範囲およびhi/lo生成ID
実験的、オプトイン
クロスシャードインデックスとグローバル値リース
実験的/オプトイン:正確性、リカバリ、およびシャードプルーニングパス。現在のレイテンシ/書き込みオーバーヘッドはリリースゲートで文書化されています。
グローバルインデックスのヘルスとPrometheusメトリクス
/health、/v1/admin/global-indexes、/metrics、およびRust運用レポート
Ubuntu/macOS x86-64およびARM64リリースアーティファクト
公開されているDebianパッケージと強化されたsystemdサービス
Rustライブラリのエントリポイント
オプションでアタッチされたリスナー付き
動作中
同じホストのサービスと組み込みプロセスが1つの準備完了ルートを共有する
ローカルファイルシステム上で
ネイティブMongoDBワイヤープロトコル
TinyMongoとの互換性
計画中
MySQLワイヤープロトコル
計画中
ネイティブPython拡張
同期/非同期APIが動作中。タグ付きリリースは監査済みのmacOS/Linux ARM/x86ホイールをビルドします。
サービスレスライフサイクル
計画中
BriskDBの配置場所
これらのプロジェクトは異なる問題を解決します。この表はコンパスであり、ベンチマークスコアボードではありません。
プロジェクト
構築対象
書き込みモデル
アクセス
ストレージ形状
BriskDB
同じホストのシャーディング、サービス+組み込み
独立したシャードWAL間の並列書き込み
PostgreSQL、HTTP、Rust、Python
マニフェスト + 通常のSQLiteシャードファイル
SQLite
小規模、組み込み、単一ファイルデータベース
WALあたり1つのライター
SQLite APIとエコシステム
1つの通常のSQLiteファイル
rqlite
シンプルなマルチノード可用性
Raftログを介した書き込みフロー。HA向けに最適化、書き込みスケーリング向けではない
HTTP + クライアントライブラリ
ノード間で複製されたSQLite状態
Turso / libSQL
クラウド/エッジアクセスとローカルファースト同期
製品依存のプライマリまたはローカルプッシュ/プルモデル
SDK + HTTP
TursoデータベースまたはレガシーSQLite互換libSQL
Citus
成熟した分散PostgreSQL
PostgreSQLワーカーシャード間の並列書き込み
PostgreSQL
PostgreSQLコーディネーター + ワーカークラスタ
1つのローカルサービスまたは組み込みエンジンが、検査可能なSQLiteファイルを横断して書き込み競合を分散させ、馴染みのあるデータベースプロトコルを話したい場合にBriskDBを選択してください。単一のSQLiteファイル、複製された高可用性、管理されたエッジ同期、または成熟したマルチノードPostgreSQLクラスタが真の要件である場合は、他のものを選択してください。
30秒で試す
ネイティブホイールをインストールします。クローンもRustコンパイラも不要です。
python -m pip install --only-binary=:all: briskdb
curl -fsSLO https://raw.githubusercontent.com/schapman1974/briskdb/main/examples/launch_demo.py
python launch_demo.py
このデモは、4つのPythonスレッドから32回のルーティングされた書き込みを行い、4つの通常のSQLiteシャードファイルすべてに行が受信されたことを証明し、すべての行を読み戻し、HTTPヘルスチェックを行い、PostgreSQLリスナーを開始します。一時ディレクトリを使用し、終了時にクリーンアップします。GIFレンダラーはこの正確なシナリオを実行し、CIは公開されているすべてのホイールターゲットに対してこれをテストします。
スタンドアロンサービスを実行するには、最新のGitHubリリースから対応するmacOS/Linux ARM64またはx86-64アーカイブをダウンロードし、次のようにします。
./briskdb --data-dir ./briskdb-data --shards 4
データブラウザを開くか、サービスを検査します。
curl http://127.0.0.1:7654/health
curl http://127.0.0.1:7654/metrics
PostgreSQLリスナーを明示的に有効にします。シンプルでパラメータ化されたテキスト/バイナリ準備済みクエリは、同じバウンドされたエンジンパスを共有します。
./briskdb --data-dir ./briskdb-data --postgres-listen 127.0.0.1:5433
psql -h 127.0.0.1 -p 5433 -d default
このローカル開発フォームは認証されておらず、ループバックのみです。PostgreSQLクイックスタートは、TLSおよびSCRAM-SHA-256の4つの設定を示しています。リモートバインドにはセキュアモードが必要です。
登録されたテーブルはHTTP経由でもクエリできます。
curl -X POST http://127.0.0.1:7654/v1/query \
-H 'content-type: application/json' \
-d '{"sql":"SELECT id, name FROM widgets WHERE id = ?1","params":["widget-1"]}'
既存のSQLiteデータベースをお持ちですか?オフラインSQLiteインポーターを使用してください。
Linuxリリースには、強化されたsystemdサービスを含む.debパッケージも含まれています。
Rustへの組み込みは、BriskDb::open()または検証済みの