Следует ли открывать соединение с базой данных только один раз в приложении django или один раз для каждого пользователя в views.py?

Я работаю над своим первым проектом Django.

Мне нужно подключиться к существующему хранилищу значений ключей (в данном случае это Kyoto Tycoon) для одноразовой задачи. т.е. я не говорю об основной базе данных, используемой 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 будет открывать соединение только один раз при первом запуске приложения? т.е. будут ли все пользователи использовать одно и то же соединение?

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам