1. ホーム
  2. sql

[解決済み] InnoDBによる全文検索

2023-02-12 12:42:42

質問

私は大容量の Web アプリケーションを開発しており、その一部はディスカッションの投稿の MySQL データベースで、スムーズに 20M 以上の行に成長させる必要があります。

私は当初、テーブルに MyISAM を使用することを計画していました (組み込みの 全文検索機能 を使うつもりでしたが テーブル全体 がロックされることを考えると、私はぞっとします。行レベルロックの方がはるかに理にかなっています(巨大なテーブルを扱う際の InnoDB のその他の速度面での利点は言うまでもありません)。このような理由から、私は InnoDB を使用することをかなり強く決意しています。

問題は... InnoDBには全文検索機能が組み込まれていないことです。

サードパーティの検索システムを使うべきでしょうか?例えば Lucene(c++) / スフィンクス ? データベース忍者の皆さんは、何か提案やガイダンスがありますか? LinkedInの ゾーイ (Luceneベース) が今のところベストな選択肢のようです。 ... リアルタイム機能 (これは私のアプリケーションにとってかなり重要です) を中心に構築されているため、いくつかの洞察がない限り、まだコミットすることを少し躊躇しています...

(参考: 高メモリのリグを持つ EC2 上で、フロントエンドを提供するために PHP を使用する予定です)

どのように解決するのか?

MyISAM のフルテキストが悪いオプションであることは私が保証します。一般的な MyISAM テーブルのさまざまな問題はさておき、私はフルテキストのものがレールから外れてそれ自身を破損させ始め、定期的に MySQL をクラッシュさせるのを目にしてきました。

MySQL/innodb に投稿データを保存し、テキストを検索エンジンにエクスポートします。 定期的な完全なインデックス構築/公開をかなり簡単にセットアップすることができ、必要性を感じて時間をかけたい場合は、リアルタイムのインデックス更新を追加することができます。

LuceneとSphinxは良い選択肢です。 Xapian もそうですが、軽量で素晴らしいものです。 もし Lucene を使うのであれば、たとえ Java と格闘したくないとしても、Clucene がより良いとは思わないでください。