1

1000個のエンティティがあるとしましょう。ユーザーに次のようにファセット検索でエンティティを見つけてもらいたいです。

  1. ユーザーがフィルターを選択
  2. ajaxリクエストがGAEに送信されます
  3. サーバーは一致するエンティティの数を返します
  4. エンティティが少なくなるまで繰り返します

つまり、適用されたすべてのフィルター(チェックボックスのみ)により、最大1000回の読み取りが発生する可能性があります(返されるエンティティが少なくなるため、後続のフィルターのコストは低くなります)。これは、1日に約10回の「検索」(=複数のフィルターを適用)すると、5万回の無料読み取りクォータがすべて消費される可能性があることを意味します。

Memcachingの結果は実際にはオプションではありません。適用できるフィルターが30個ある場合、すべての組み合わせを保存するには、2 ^ 30 = "over 10億"のmemcacheエントリがあります(エンティティが変更されたときにすべて更新する必要があります)最初に10億のデータストア読み取りを行います)。

どうやら私は何かを得ませんでした。結果を効率的にキャッシュまたは計算するにはどうすればよいですか?

4

2 に答える 2

2

これを自分で実装しようとしないでください。まさにこのような状況で結果を効率的に返すように設計されたSearchAPIを使用してください。

于 2012-10-04T09:33:32.557 に答える
0

エンティティが1000程度しかない場合、説明した状況を考えると、1000個すべてのエンティティをmemcacheに保持し、データストアではなくメモリでクエリを実行するのが最善の策です。1000エンティティのメモリ内クエリは非常に高速である必要があります。

memcacheに保存する前に、エンティティをprotobufsに変換できます。このリンクを参照してください。

于 2012-10-03T11:44:32.620 に答える