用語集
MygramDB のドキュメントでよく出てくる用語をまとめています。初めて読む場合は、細かい実装名を全部覚える必要はありません。まずは「MySQLから変更を受け取り、メモリ上の検索インデックスを更新する仕組み」として読めば十分です。
最初に押さえる用語
初めてセットアップする場合は、まず binlog、GTID、初期スナップショット、N-gram、CIDR の5つだけ理解すれば進められます。
MySQL / レプリケーション
binlog
MySQLやMariaDBが、INSERT/UPDATE/DELETEなどの変更履歴を書き出すログです。MygramDBはこのログを読んで、MySQL側の変更を検索インデックスへ反映します。
ROW形式
binlogに「どの行がどう変わったか」を記録する形式です。MygramDBは行単位の変更を読むため、binlog_format=ROW が必要です。
binlog_row_image=FULL
UPDATE/DELETE時に、変更前後の行データを十分に含める設定です。MygramDBがテキスト列やフィルタ列を正しく更新・削除するために必要です。
GTID
MySQLのトランザクションに付く一意な番号です。「どこまで変更を読んだか」を安全に記録するために使います。MygramDBはスナップショットやダンプにGTIDを保存し、再起動後にその位置から追いつきます。
レプリカ
MySQLの変更を受け取る側のサーバーです。MygramDBはMySQLから見ると検索専用のレプリカのように振る舞いますが、SQLクエリを実行する一般的なMySQLレプリカではありません。
初期スナップショット
MySQL上の既存データを最初に読み込んで、MygramDBの検索インデックスを作る処理です。通常は SYNC <table> で明示的に開始します。
検索インデックス
N-gram
文字列を固定長の小さな断片に分けたものです。たとえば search を2文字単位にすると se、ea、ar、rc、ch になります。MygramDBはこの断片を手がかりに高速検索します。
CJK
Chinese / Japanese / Korean の略です。中国語・日本語・韓国語のように、単語の境界が空白で分かれない言語をまとめて指すときに使います。
ポスティングリスト
あるN-gramを含むドキュメントIDの一覧です。たとえば se を含むドキュメントが 1, 5, 42 なら、se -> [1, 5, 42] のように持ちます。
DocID
MygramDB内部で使う数値IDです。MySQLの主キーとは別物です。検索処理ではDocIDを使い、結果を返すときにMySQLの主キーへ戻します。
Roaring Bitmap
大量の整数集合を圧縮して高速にAND/OR演算できるデータ構造です。頻出するN-gramのポスティングリストを効率よく扱うために使います。
デルタエンコーディング
連続するIDをそのまま保存せず、前のIDとの差分で保存する圧縮方法です。100, 105, 200 を 100, 5, 95 のように表せるため、疎なポスティングリストでメモリを節約できます。
BM25
検索語が文書内にどれくらい重要に現れるかをスコア化する代表的な全文検索ランキング方式です。MygramDBでは SORT _score DESC で関連度順に並べ替えられます。
verify_text
N-gram検索で得た候補を、保存している正規化済みテキストと照合して偽陽性を除く機能です。正確な結果が必要な場合は memory.verify_text: "all" を使います。
ファセット
検索結果をカテゴリやステータスなどの値ごとに集計する機能です。たとえば「検索結果のうち category=tech が15件、ops が7件」のような件数を返します。
API / 運用
TCPプロトコル
MygramDB独自のテキストベースのコマンドプロトコルです。SEARCH articles hello のようなコマンドをTCPポート11016へ送ります。
HTTP API
JSONで検索・カウント・ファセット・ドキュメント取得を行うAPIです。v1.7以降、テーブル操作は /tables/{identity}/... 形式です。
CIDR
IPアドレスの範囲表現です。10.0.0.0/8 は 10. で始まる広い範囲を表します。MygramDBでは network.allow_cidrs で接続元を制限します。
CORS
ブラウザから別ドメインのHTTP APIを呼ぶための仕組みです。サーバー間通信では通常不要です。ブラウザから直接MygramDBを呼ぶ場合だけ、信頼できるOriginに限定して有効化してください。
スナップショット / ダンプ
MygramDBのインデックス、ドキュメントストア、GTID位置をファイルに保存したものです。DUMP SAVE で作成し、DUMP LOAD で復元します。
WAL
Write-Ahead Log の略で、データベースが変更履歴を先にログへ書く方式です。MygramDBはWALではなく、スナップショットとMySQL binlogの再読込で復旧します。