
PlanetScale、Postgres向け全文検索拡張「TIN」をGAリリース
PlanetScale は全文検索拡張 TIN(Text INdex)を Postgres および Neki データベース向けに GA リリースしたと発表した。TIN はブール式、フレーズクエリ、スパンクエリ、ファジーおよびワイルドカード マッチング、大文字小文字およびアクセント記号の正規化、COUNT(*) クエリ、BM25 スコアリングの上位 k クエリに対応し、複数のワークロードでベンチマーク結果を公開している。
PlanetScale が発表した TIN(Text INdex)は、Postgres および Neki データベース向けの全文検索拡張として GA リリースされた。TIN は、既存の Postgres 向け全文検索インデックスでは満たされていなかった要件をすべて満たすと同社は述べている。
TIN の機能
TIN はブール式、フレーズクエリ、スパンクエリをサポートする。また、ファジー、ワイルドカード、正規表現マッチングに対応し、大文字小文字およびアクセント記号の正規化、COUNT(*) クエリ、BM25 スコアリングの上位 k クエリを実装している。さらに、結合、複雑な WHERE 句、継続的な更新、レプリケーション、バックアップ、トランザクション可視性に対応している。
ベンチマーク結果
PlanetScale は ParadeDB、pg_textsearch、Postgres GIN に対して複数のワークロードでベンチマークを実施した。Stack Exchange データ(85 GB、150 万ドキュメント)、Wikipedia、Reddit コメント、研究論文を含むコーパスが使用された。
ベンチマークの結果は以下の通り:
- 上位 10 件の混合クエリで、TIN は ParadeDB の 25 倍のクエリ数をこなし、p99 レイテンシは 26 倍低い。
- 結合およびフレーズクエリでは、TIN は ParadeDB の 10 倍、Postgres GIN の 541 倍のクエリをこなし、p99 レイテンシは GIN より 1,356 倍低い。
- 同時書き込みを伴う選言クエリでは、TIN は pg_textsearch の 36 倍、ParadeDB の 57 倍のクエリをこなし、p99 レイテンシは pg_textsearch より 24 倍、ParadeDB より 36 倍低い。
- 10 分間の実行で、TIN は 270,279 件の更新を完了し、ParadeDB は 185,584 件、pg_textsearch は 735 件であった。
インデックス構築時間は 8 分から 129 分の範囲で、インデックスサイズはコーパスの 33% から 61% の間であった。Stack Exchange コーパスでは、TIN のインデックスサイズは 50.7 GB、ParadeDB は 52.1 GB、pg_textsearch は 41.5 GB、Postgres GIN は 28.0 GB であった。
技術的特徴
TIN は Postgres の ctid(current tuple identifier)値をドキュメント識別子として直接使用する。ctid は tuple の物理的位置を特定する 48 ビット番号であり、上位 32 ビットはブロック番号、下位 16 ビットはブロック内のオフセットを示す。8KB の Postgres ページは最大 291 個の tuple を含むことができない。
TIN は初期インデックス作成用の不変セグメント、変更用の可変セグメントを生成する。削除されたドキュメントを処理するため、セグメント単位でリレーション生存ビットマップを保持し、ポスティング圧縮にはページレベルおよびオフセットレベルのビットマップを使用する。ページレベルビットマップは 256 ビットでベクトルレジスタに適合する。
筆者の見立て
- TIN のパフォーマンスは「信じがたいほど高速」と評価されている。
- TIN の MB/query における低い数値は、ブロックキャッシュおよび I/O キャパシティへの影響を減らし、同じサーバー上の他のクエリが高速に保たれることを示唆している。
- セグメント間の段階的なマージアプローチにより、通常のマージに関連する CPU および I/O コストの大部分が削減される可能性を示唆している。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
PlanetScale、「Introducing TIN: full-text search for Postgres — PlanetScale」、https://planetscale.com/blog/introducing-tin(ParadeDB Benchmarker の報道による)