2016-04-17 22 views
0

Djangoアプリでは、Commentというデータモデルのクエリーセットがあります。これには、ユーザーが残したテキストコメントが含まれています。Djangoクエリーセットでの出現頻度の割合を計算する

「n」ユーザーがコメントしたとします。どのユーザーがコメントの何%を残しているかを計算する最も速い方法は何ですか?

今私は可能になるだろうと思っています:

Comment.objects.filter(commenter=<username>).count()/Comment.objects.count() 

あなたは何を勧めますか?私の目的は、あまりにも多くの人がコメントしている人に、スパムの可能性のあるアカウントを選別するためにフラグを立てることです。私はこのクエリを大量に実行するので、パフォーマンスに重点を置いています。

答えて

1

データベース内の各ユーザーに対して1つのクエリを作成しないでください。この例では、あなたのCommentがへの外部キーを持っているUserモデルを前提としてい

from django.db.models import Count 

total_comments = Comment.objects.count() 
# Fetch top 10 commenters, annotated with number of comments, ordered by highest first 
User.objects.annotate(num_comments=Count('comment')).order_by('-num_comments')[:10] 
for user in users: 
    percentage = user.num_comments/total_comments 

:代わりに、あなただけのようなもので、各ユーザのコメントの数(あるいはトップnコメンター)を照会することができます。

コメントの相対的な数を比較する場合、コメントの合計の割合は実際には関係ありません。

関連する問題