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