Каково рекомендуемое время жизни объекта базы данных в веб-приложении?

Я рассматриваю возможность использования PetaPoco в обычном веб-приложении. Говоря обычным, я имею в виду

  • обработка запросов в отдельных потоках из пула
  • запросы выполняются быстро: нет длинных опросов, потоковой передачи и т. д.
  • но не обязательно ASP.NET, это может быть например Нэнси

Каким должно быть время жизни объекта базы данных и базового DbConnection?

  • глобально статический (думаю, нет, из-за этого ответа)
  • статический для каждого потока, [ThreadStatic]
  • за запрос
  • единица стиля работы: создать и удалить, как только задача будет завершена

Я особенно ценю ответы тех, кто запускает рабочие приложения с помощью PetaPoco.


person amartynov    schedule 09.07.2014    source источник
comment
Вам определенно следует избегать ThreadStatic с ASP.NET из-за гибкости потоков.   -  person Lucas Trzesniewski    schedule 09.07.2014


Ответы (3)


За запрос - это путь

  • глобально статично: вы правильно догадались. Принесет проблемы с доступом к тому же набору записей и другим. Определенно нет.
  • статический для каждого потока. Вам следует избегать [ThreadStatic] в Asp.net
  • по запросу: отлично работает
  • единица стиля работы: тоже отлично работает (не мое предпочтение)
person Eduardo Molteni    schedule 10.07.2014
comment
@Eduardo Ограничивает ли выполнение по запросу эффект пула соединений? - person Matthew; 15.10.2016
comment
@Matt На самом деле он полностью использует пул соединений для создания новых соединений без снижения производительности. - person Eduardo Molteni; 19.10.2016

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

Лучше всего использовать один объект на запрос, по крайней мере, для быстрой обработки запроса. Однако это не всегда просто. Если вы рискуете оставить объекты без их удаления (например, если есть исключение), лучше использовать один объект для ограниченной задачи, где вы можете убедиться, что он правильно удален.

person Guffa    schedule 09.07.2014
comment
+1 к риску неутилизированных объектов. Можете ли вы подробнее рассказать об обработке запроса, который может начинаться в одном потоке и заканчиваться в другом потоке. Когда это возможно? - person amartynov; 11.07.2014
comment
@amartynov: это называется переключением потоков или гибкостью потоков (для дальнейшего поиска). Вот запись в блоге, в которой я нашел наглядный пример: blog.idm.fr/2010/03/ - person Guffa; 11.07.2014

База данных — это дешевый объект для создания, поэтому я просто создаю его по мере необходимости. Я использую PetaPoco (или, точнее, AsyncPoco, поэтому я не связываю потоки во время работы, связанной с вводом-выводом. ) в загруженном веб-приложении, и это отлично работает для меня. Другие предпочитают -request, и это тоже должно хорошо работать.

person Todd Menier    schedule 09.07.2014