[英]Django multiple queries optimization
我有一個Django視圖,該視圖返回數千個字符串之間的編輯距離圖。 這些字符串是MyModel
類的參數。 我在myView
函數中計算距離。
我分析了此代碼,並意識到循環內的queryset
消耗大量時間。
我該如何優化呢?
# models.py
class MyModel(models.Model):
str1 = models.CharField(max_length=300)
str2 = models.CharField(max_length=300)
# views.py
def compare(a, b):
return Levenshtein.distance(a, b) / max(len(a), len(b))
def myView(request):
query_set = MyModel.objects.filter(....)
size = query_set.count()
arr = numpy.zeros(size ** 2).reshape(size, size)
for i in range(size):
m1 = query_set[i].str1
for j in range(size):
m2 = query_set[j].str1
arr[i][j] = compare(m1, m2)
json_out = json.dumps({'data': arr.tolist()})
return HttpResponse(json_out, content_type="application/json")
編輯
我認為問題與數據庫訪問有關,因為我嘗試了類似的方法,但是使用外部txt文件存儲數據並且速度更快:
# file.txt
[{'par1': ....}, {'par1': ....}, ...]
# views.py
def myView(request):
with open('file.txt', 'r') as out:
data = out.read()
size = len(data)
arr = numpy.zeros(size ** 2).reshape(size, size)
for i in range(size):
for j in range(size):
m1 = data[i]['par1']
m2 = data[j]['par1']
arr[i][j] = compare(m1, m2)
json_out = json.dumps({'data': arr.tolist()})
return HttpResponse(json_out, content_type="application/json")
myView實際在執行幾個查詢? 應該對count()進行1或可能為2,然后對實際數據進行2。 但我首先要進行驗證。 我使用https://github.com/dobarkod/django-queryinspect,但是大多數人使用https://github.com/jazzband/django-debug-toolbar來查找正在執行的查詢數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.