私はこのプロジェクトのために、残りのバックエンドを書いています。相続人は私が解決しようとしている問題の種類の基本的な例。これらの学生は学年でテストがあり、各学生が列current_average_gradeを持っています。
毎回の試験は、(既存のすべてのテストを使用して)このaverage_grade_shouldを更新する、記憶されています。
質問があるので、これは計算とDjangoのポストビュー内に格納する必要があります(デシベルから全学年を取得し、計算を行う)、またはSQLトリガーを持つだけJSONに変換するために、SQLジャンゴを使用しています。
このため、SQLを使用する利点は、それは理論的にははるかに高速である必要があり、あなたはまた、無料のための並行性を得ることは勿論です。
欠点は、私は今、SQLプログラミングおりますので、私は管理するためのさらに別のコードベースを持っており、それもジャンゴで問題を作成するかもしれないということです。
そこでここでは理想的なソリューションをいただきましたか!?どのように私は、エレガントな方法でグレードってこんなモン・ロジックを適用していますか?
私は、Djangoの中でそれを扱うと思う景色は良いアイデアになります。この方法では、より良い方法でビジネス・ロジックを制御することができ、また、あなたは広範囲にデータベースを管理する必要はありません。
そして、同時実行ジャンゴを処理するための形式で美しい方法を提供しますselect_for_update()
。
ジャンゴで同時実行の取り扱い
私たちは、データベースのロックを使用したリソースのロックを取得するには。そして、Djangoで我々は使用select_for_update()データベースのロックのために。
サンプルコード
from django.db import transaction
entries = Entry.objects.select_for_update().filter(author=request.user)
with transaction.atomic():
for entry in entries:
# action on each entry in thread-safe way