2012-06-12 3 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) 

Во втором подходе, будет Джанго только открыть соединение один раз, когда приложение запускается в первый раз? то есть все ли пользователи будут использовать одно и то же соединение?

Какой подход лучше всего?

+0

Вы вообще используете фреймворк django? Вы можете использовать это для обработки соединения. –

+0

Я не сейчас (все еще узнаю о джанго), но обязательно посмотрю на него. Я также рассматриваю возможность использования memcached, поскольку Kyoto Tycoon позволяет подключиться через протокол memcache ... –

ответ

1

Открытие соединения, когда требуется, скорее всего, станет лучшим решением. В противном случае существует вероятность того, что соединение больше не будет открыто. Таким образом, вам нужно будет проверить, что соединение все еще открыто, и перезапустите его, если он еще не продолжен.

Это означает, что вы можете запускать запросы в блоке контекстного менеджера, что автоматически закроет соединение для вас, даже если возникает случайное исключение.

В качестве альтернативы вы можете иметь пул соединений и просто захватить тот, который в настоящее время не используется (я не знаю, было ли это проблемой в этом случае).

Все зависит от того, насколько дорогими являются создание соединений, и имеет смысл использовать их повторно.

+0

Хороший вопрос о необходимости проверить, все ли соединение открыто. Мне нужно каждый раз проверять затраты на открытие и закрытие соединений, но я подозреваю, что это не проблема. Я просто пытаюсь понять лучшие практики в этих ситуациях ... –

 Смежные вопросы

  • Нет связанных вопросов^_^