3

Amazon S3 にアップロードされた n 個のファイルがあります *検索が必要です* これらのファイルは、そのコンテンツ内の文字列の出現に基づいて、入力ストリームを文字列に変換して S3 バケットからファイルをダウンロードする 1 つの方法を試してから、単語を検索しますcontent ですが、ファイル数が 5 ~ 6 個を超えると、上記の処理に時間がかかります。

これを行う他の方法はありますか、事前に感謝してください。

4

5 に答える 5

2

いいえ!

オブジェクトのメタデータ (ファイル名など) から一致する場所を推測できない場合は、手動でダウンロードして検索する必要があります。帯域幅に余裕がある場合は、一度にいくつかのファイルをダウンロードして速度を上げることをお勧めします。

于 2013-02-28T03:54:29.360 に答える
2

一言でNO!!

パフォーマンスを向上させるためにできることは、ファイルをローカルにキャッシュして、ファイルを何度もダウンロードする必要がないようにすることだと思います

おそらく、Last-Modifiedヘッダーを使用してローカル ファイルが汚れているかどうかを確認してから、再度ダウンロードできます。

于 2013-02-28T03:56:01.390 に答える
1

あなたがファイルを所有しているように見えるので、コンテンツに基づいて手動でインデックスを作成することをお勧めします。多くの「キーワード」または各ファイルに関連付けられたメタデータがある場合は、クエリを実行してユーザーが探している正確なファイルを取得する軽量データベースを使用することで自分自身を助けることができます. これにより、帯域幅が節約され、「インデックス」システムのようなものを維持するという犠牲を払って、はるかに高速になります。

別のオプション (各ファイルに多くのメタデータが含まれていない場合) は、バケット内のファイルを再編成し、次のように「自動インデックス」するプレフィックスを追加することです。

/foo/bar/randomFileContainingFooBar.dat /foo/zar/anotherRandomFileContainingFooZar.dat.

この方法では、必要なファイルのセットを見つけるためにバケット全体をスキャンすることになる可能性があります (これが、メタデータがほとんどない場合にのみこのオプションを提案した理由です) が、一致するファイルのみをダウンロードするため、さらに優れています。あなたの元のアプローチよりも。

于 2013-02-28T12:14:00.987 に答える
-4

私は Amazon S3 には詳しくありませんが、リモート ファイルの検索に対処する一般的な方法は、インデックス自体をリモート サーバーに保存して、インデックス作成を使用することです。そうすれば、各検索でインデックスを使用して、一致する可能性のある比較的少数のファイルを推測し、それらのファイルのみを直接スキャンして、それらが実際に一致するかどうかを確認します。検索用語とパターンの複雑さによっては、ファイルの直接スキャンを完全に回避できる場合もあります。

とは言っても、Amazon S3 に使用できるインデックス作成エンジンがあるかどうか、またはそれを行う補助ライブラリがあるかどうかはわかりませんが、概念は単純なので、あまり多くなくても自分で何かを機能させることができるはずです仕事。

編集:

通常、各ファイルに存在するトークンは、インデックスが作成されたものです。たとえば、"foo bar"を検索する場合、インデックスは"foo"を含むファイルと"bar"を含むファイルを示します。これらの結果の断面は、"foo""bar"の両方を含むファイルになります。これらのファイルを直接スキャンして、 「foo」「bar」が正しい順序で隣り合っているファイル (存在する場合) を選択する必要があります。

いずれにせよ、クライアントにダウンロードされるデータの量は、すべてをダウンロードしてスキャンするよりもはるかに少なくなりますが、それはファイルの構造や検索パターンによって異なります。

于 2013-02-28T04:07:58.697 に答える