付録: データベーススキーマ

blunderDB のデータベースは単純な SQLite ファイル(拡張子 .db)です。そのため、blunderDB がなくても、任意の SQLite ファイルエディターやブラウザーで開いて中身を確認できます。

バージョン管理と移行

データベーススキーマはバージョン管理されています。現在のスキーマバージョンは2.28.0です。これはアプリケーションのバージョンとは独立しており、内部構造が変化したときにのみ更新されます。開いているデータベースのスキーマバージョンはメタデータパネル(meta コマンド)で確認できます。

重要

以前のバージョンの blunderDB で作成したデータベースを開く前に、必ず .db ファイルをバックアップしてください。

注釈

バージョン 0.10.0 以降、データベースを開くときに すべてのスキーマの移行が自動的に行われます。手動での移行コマンドは不要です。移行はその場で行われます:新しいスキーマに移行されたデータベースは、以前のバージョンの blunderDB では開けなくなります。そのため、事前のバックアップが重要です。

主なテーブル

現在のスキーマは次のテーブルを中心に構成されています:

  • ポジションと分析 :position(重複排除されたポジション)、analysis(関連する分析データ)、comment(コメント)。

  • マッチ :match、game、move、move_analysis は、インポートされたマッチ、そのゲーム、その手、および各手の分析を格納します。

  • コレクション :collection と collection_position(連結テーブル)は、手動で選択されたポジションをまとめます。

  • トーナメント :tournament はマッチをトーナメントにまとめます。

  • 間隔反復(Anki) :anki_deck、anki_card、anki_review_log は、デッキ、カード、および復習の記録(FSRS アルゴリズム)を管理します。

  • 履歴とその他 :command_history と search_history はコマンドと検索の履歴を保持し、filter_library はフィルターライブラリを、metadata はデータベースのメタデータ(スキーマのバージョンを含む)を保持します。

設計の原則

スキーマ 2.0.0 以降、いくつかの設計上の選択によって、検索が高速化され、ファイルサイズが削減されます:

  • ポジションの重複排除 :各ポジションは Zobrist ハッシュと一意のインデックスを持つため、複数のインポートで同じポジションが現れても一度しか保存されません。

  • 非正規化されたフィルタリング列 :よく検索される条件(判断タイプ、出目、ピップカウント差、ベアオフしたチェッカー、バックチェッカー、手やキューブのエラー、勝率など)は、高速なフィルタリングのために専用の列にあらかじめ計算されています。

  • ビットボードによる事前フィルタリング :占有列とポイントマスク列により、構造パターンの検索時に非常に高速な整数ベースの事前フィルタリングが可能になります。

  • コンパクトなストレージ :ポジションはコンパクトにエンコードされ、分析データは共有辞書付きの zstd で圧縮されます(zlib で圧縮された古いデータベースも引き続き読み込め、vacuumの実行時に段階的に再圧縮されます)。これによりファイルサイズが大幅に削減されます。

  • WAL ジャーナリング :WAL モードと調整された PRAGMA により、読み書きのパフォーマンスが向上します。