0

これに似た質問がすでにいくつかありますが、多少異なる回答を期待しています。

私は Python で Google App Engine に Web サイトを持っており、登録ユーザーが投稿に投票できるようにし、各ユーザーが 1 回だけ投票できるようにしたいと考えています。

私が考えて読んだ主な方法は、投票したユーザーの各投稿にリストを保持し、まだ投票していないユーザーにのみ投票ボタンを表示することです. 私には、これは洗練されていない解決策のように思えます。何百人もの人々が何百もの投稿に投票しているときにこれを追跡することは、そのような小さな機能のために追跡するための大量の情報です.

私はこれについて間違っているかもしれませんが。これは、私が想像しているほどのデータ/データストアの書き込み豚ですか? 毎日数百票の投票があるとしたら、それは大したことではありませんか?

4

3 に答える 3

3

次のような投票の種類を作成します。

class Vote(db.Model):
    value = db.IntegerProperty() # Or whatever the vote value is.

秘訣は、ユーザーIDと投稿IDの組み合わせとして投票用のキーを生成することです。

keyname = str(user.id) + "-" + str(post.id)
vote = Vote.get_or_insert(keyname, value="vote value")

このようにして、ユーザーが特定の投稿にすでに投票しているかどうかをすばやく確認できます。

于 2012-10-15T05:14:26.587 に答える
0

重複を避けるset()変数型を試しましたか?

于 2012-10-15T05:12:11.340 に答える
0

数百の投稿に対して数百の投票しかない場合、これはビッグ データ ホグや読み取り/書き込みホグではありません。ユーザーのリストをデータ ストアのポスト エンティティにリストとして格納していると仮定しています。ユーザーを指す long を保存するか、電子メールの文字列を保存するかによって、投稿ごとにユーザーごとに最大で 10 バイトを使用している可能性があります。投稿ごとに 1000 票があり、1000 件の投稿がある場合、10 MB を使用することになります。さらに、読み取り/書き込みのコストはそれほど増加しません。必要に応じて、値のインデックスを作成せず、必要な情報をデータ ストアから取得するときに検索するだけで、そのコストを削減できます。

于 2012-10-15T11:57:41.750 に答える