1

データベースに少なくとも 500,000 個以上の小さな「ファイル」を保存しようとしています (平均サイズは 3 KB、最大で 8 ~ 10 MB になる場合もあります)。これは、ファイル システムからそれらを削除し、検索/ユーザー操作を高速化するためです。

  • メタデータ (基本的にはファイル名、作成日時、変更日時)
  • ファイルの内容の LONGBLOB

それらをデータベース(MySQL)に保存することは問題ありません。データベースにはその数のファイルが保存され、メタデータ (文字列、日時、日時) の検索も、関連するインデックスを使用してすばやく実行できます。

残念ながら、当然のことながら、LONGBLOB 内を検索しようとすると、非常に遅くなります。LONGBLOB 内のデータは次のようになります。

  • 80% は「テキスト ファイル」(XML など) で、100 KB 未満です。
  • 15% は「テキスト ファイル」ですが、100 KB を超えています (最大 8 ~ 10 MB)。
  • 5% 以下はバイナリ ファイルです (「テキスト」コンテナーで破損する可能性があります)。

このデータをテキストまたは不明として分類し、別の LONGTEXT テーブルに配置すると、(LONGBLOB ではなく) LIKE "%X%" などの操作を実行するときにパフォーマンスが向上しますか?

BLOB を (非常に "grep" スタイルで) 検索するときのパフォーマンスを向上させるためにできる他の手法はありますか? 通常、検索は BLOB 内に保持される短いデータ シーケンスであり、繰り返される検索はほとんどない可能性があります (ただし、検索はある程度予測可能であり、一部のデータは他のデータよりも興味深いものです)。

4

1 に答える 1

1

MATCH AGAINST効率的に検索するには、フルテキスト インデックス (このような量のデータでは巨大なサイズになります) を作成し、クエリを実行することをお勧めします。LIKE大量のテキストでは非常に遅くなりますが、これはよく知られており、避けるべきです。

http://dev.mysql.com/doc/refman/5.5/en//fulltext-search.html

それらをFSに保持し、実際に「GREPスタイル」検索を実行して「クエリ」に一致するファイルパスのリストを返すサーバー側言語内から呼び出すコマンドラインツールを独自に構築することもできますが、私はこれが効率的かどうかはわかりません。

于 2012-09-30T21:30:16.437 に答える