0

Google アプリ エンジンで「逆ドキュメント頻度」を実装する必要があります。効率を改善するための提案を探しています。今、私は基本的なルーチンを

Webページを解析するとき、次のように各ペアをデータストアに保存します

for(String phrase : phrase_collection){
  dataStore.put(phrase, domain);
}

後でIDFを計算するとき、データストアからフレーズの出現をフェッチします。

for(String phrase : phrase_collection){
  long count = dataStore.get(phrase).size();
}

ただし、速度は満足のいくものではなく、30 秒のタイムアウトが頻繁に発生します。このシナリオでは、追加の課題があります。

-多言語入力(ウェブページ)。そのため、フレーズも異なる言語で書かれているため、キャッシュするのが難しくなっています。

- Web ページやランキング フレーズの解析にも時間がかかります。全体のプロセスは、charset_detect -> language_detect -> 異なる言語による解析 -> ランキングのようなものです。

GAE では常に有効になっています。

提案をお待ちしております!前もって感謝します!

4

2 に答える 2

1

フレーズごとに個別の get (および put) を実行しています。データストアへのラウンドトリップが非常に多いため、これは当然非常に遅くなります。代わりに、反復可能なエンティティまたはキーを受け入れるputおよびgetのバリアントを使用し、それらすべてを 1 つのトランザクションで実行する必要があります。

また、この作業は「オフライン」で行う必要があります。Stefan が示唆するように、バックエンドまたはタスク キューを使用します。ここでは、タスク キューの方が適している可能性があります。

于 2011-06-02T00:47:47.947 に答える
0

いくつかのオプションがあります。

新しく導入されたバックエンドを使用して、物事を稼働させることができます。そうすれば、タイムアウトに対処する必要がなく、並列タスクについて心配する必要もありません。

タスク キューを使用できます。(バックエンドの代替として。)ただし、それはタスクを並列化する能力に依存します。

いずれにせよ、memcache の使用を開始する必要があります。(JDO を使用している場合は、そのように単純に有効にすることができます)。また、追加設定なしで非同期アクセスや memcache をサポートする objectify や twig などの「よりネイティブな」永続化レイヤーに切り替えることを検討することもできます。

于 2011-06-01T12:37:55.070 に答える