2012-06-12 86 views
0

我正在開發我的第一個Django項目。數據庫連接應該只在django應用程序中打開一次,還是在views.py中的每個用戶打開一次?

我需要連接一個預先存在的關鍵值存儲(在這種情況下,它是京都大亨)一次性任務。即我不是在談論django使用的主數據庫。

目前,我有一些工作,但我不知道我在做什麼是明智的/最佳的。

views.py

from django.http import HttpResponse 
from pykt import KyotoTycoon 

def get_from_kv(user_input): 

    kt=KyotoTycoon() 
    kt.open('127.0.0.1',1978) 

    # some code to define the required key 
    # my_key = ... 

    my_value = kt.get(my_key) 

    kt.close() 

    return HttpResponse(my_value) 

即它打開每一個用戶進行查詢時間的數據庫的新連接,然後在完成後再次關閉連接。

或者,這樣會更好嗎?

views.py

from django.http import HttpResponse 
from pykt import KyotoTycoon 

kt=KyotoTycoon() 
kt.open('127.0.0.1',1978) 

def get_from_kv(user_input): 

    # some code to define the required key 
    # my_key = ... 

    my_value = kt.get(my_key) 

    return HttpResponse(my_value) 

在第二種方法中,將Django的只開一次連接時,應用程序首次啓動?即所有用戶將共享相同的連接?

哪種方法最好?

+0

你是否在使用django緩存框架?您可以利用它來處理連接。 –

+0

我現在不在(仍在學習django),但一定會研究它。我也在考慮使用memcached作爲京都大亨允許通過memcache協議連接... –

回答

1

當需要時打開連接可能是更好的解決方案。否則,連接不再可能打開。因此,您需要測試連接是否仍處於打開狀態,如果尚未繼續,請重新啓動連接。

這意味着您可以在上下文管理器塊中運行查詢,即使發生非原因異常,該查詢也會自動關閉連接。

另外,你可以有一個連接池,只是抓住一個目前沒有使用(我不知道這是否會成爲這種情況下的問題)。

這一切都取決於創建連接的費用是多少,以及是否有意義重新使用它們。

+0

關於需要檢查連接是否仍然打開的好處。我需要檢查每次打開和關閉連接的開銷,但我懷疑這不會成爲問題。我只是想在這些情況下得到最佳實踐的感覺...... –

相關問題