0

各ユーザーが投稿を送信でき、各投稿には投票とコメント数によって決定されるランキングがあるGoogleアプリエンジン用のPythonでアプリを作成しています。ランキングは、この 2 つのパラメーターに基づいた単純な計算にすぎません。この値をデータストアに保存する (そしてそこにスペースを取る) べきか、必要なたびに単純に計算するべきか疑問に思っています。参考までに、投稿はランキング順に並べ替えられるため、これを考慮する必要があります。

私は主に効率のために考えており、データストアのスペースを節約するか、読み取り/書き込みクォータを節約するかのバランスをとろうとしています.

単純に保存する方が良いと思いますが、投稿に投票したりコメントしたりするたびにランキング値を再計算して書き直す必要があります。

どんな入力でも素晴らしいでしょう。

4

3 に答える 3

2

ランキングをプロパティとして投稿に保存するのはどうですか。それはクエリ/ソートには意味がありません。

投票/コメント数を保存するのと同時に(同じエンティティで)ランキングを保存する場合、書き込みコストの増加はインデックスのみになります。(初期書き込みコストもOKですが、それは2 [とにかく非常に小さい]です)。

とにかく誰かが投稿に投票したりコメントしたりするたびにデータベース操作を行う必要があります!?!他にどのように投票/コメントを追跡できますか?

実際には、テキスト検索を使用して投稿内のデータを検索するようになると思います。もしそうなら、私はおそらく検索インデックスのプロパティとしてランキングを保存し、それを使用して一致する結果をランク付けすることを検討します。

表示する投稿をどのように選択するかを考慮する必要はありません。投票とコメントによるランキングが唯一の基準ですか?

于 2012-06-30T00:34:52.497 に答える
1

エンティティで実行中の投票数を維持することに依存している場合は、時折投票を失う​​ことをいとわないか、トランザクションを使用する必要があります。トランザクションを使用する場合、1秒間に実行できるトランザクションの数に制限があります。(トランザクションとエンティティグループに関するドキュメントを参照してください)。投票数が多い場合は、レート制限が問題になる可能性があります。

投票率が低い場合は、エンティティでカウントを維持すると問題なく機能する可能性があります。ただし、投票率に大きなピークがある場合は、定期的にキャッシュされたカウントにロールアップされる個別の投票エンティティを保存し、おそらくmemcacheに保持されている(おそらく信頼性の低い)増分カウントによって調整すると、より適切に機能する可能性があります。

それは本当にあなたが何のために最適化したいかに依存します。投票数を非トランザクションでキャッシュしておくことでディスク書き込みを最小限に抑えようとすると、投票を失う​​リスクがあります。

于 2012-06-30T03:50:01.830 に答える
1

キャッシングは、計算が高価な場合に最も役立ちます。計算が単純で安価な場合は、必要に応じて再計算することもできます。

于 2012-06-29T22:52:34.140 に答える