2

Google App Engineでは、エンティティのサイズは1MBに制限されています。私がブログシステムを持っていて、各記事に何千ものコメントがあり、いくつかの段落が長さであることを期待しているとしましょう。通常、制限なしで、すべてのコメントをブログ投稿と同じエンティティに保存します。ただし、ここでは、1MBの制限に達することが懸念されます。

他の可能な方法は、はるかに効率的ではありませんが、各コメントを個別のエンティティとして保存することですが、ブログ投稿とそのコメントを取得するために1回だけ読み取るのではなく、すべてのコメントを取得するために数回の読み取りが必要になります(同じエンティティ)。

このようなケースを処理する効率的な方法は何ですか?

4

2 に答える 2

2

コメントがスレッド化されている場合、それらを個別のエンティティとして保存することは理にかなっています。

コメントが投票の対象になる可能性がある場合、コメントを別のエンティティとして保存することは理にかなっています。

コメントを編集できる場合、それらを個別のエンティティとして保存すると、競合が減り、すべてのコメントに対して悲観的なロックを行う必要がなくなり、最後の編集によって以前の編集が上書きされるリスクが回避されます。

コメントをページングできる場合、それらを個別のエンティティとして保存することは、複数の理由で理にかなっています。インデックス作成はその 1 つです。

于 2012-10-31T04:06:26.060 に答える
1

6 つの提案があります。

1) コメントを別々のエンティティに保存します。キャッシングとカーソルが組み込まれている NDB API を使用します。そのため、ビューごとのクエリ コストを制限できます。高速アクセスのために、キーのみのクエリ、祖先クエリ、射影クエリを使用できます。参照: https://developers.google.com/appengine/docs/billing

2) 個別のエンティティにより、同時実行とインデックス作成がより簡単になります。

3) Search API と Proseptive Search API を見てください。コメントが多い場合は検索が重要になります。検索のため、コメントには個別のエンティティを使用する必要があります。これにより、検索結果に非常に簡単にアクセスできます。

4) コメントを分析するために mapreduce などのツールを使用する場合は、個別のエンティティを処理することもお勧めします。

5) また、ブログ エンジンと appstats の経験に基づいて、いつでも最適化できます。データストアが実際のボトルネックなのか、それとも使用されているインスタンスの数なのか。ユースケースはわかりませんが、クライアント (ブラウザー) を使用して結果を最適化し、キャッシュすることもできます。

6) コメントを処理するためのサードパーティのソリューションについてはどうでしょうか。Disqus javascript を使用して、彼のアプリ エンジン ブログ エンジンでコメントと検索を行う Nick Johnson の記事を参照してください。探す

于 2012-10-31T03:16:19.813 に答える