Выбор ORM n + 1 производительность; присоединитесь или никакое соединение

GCC и совместимые компиляторы используют-E опцию произвести предварительно обработанный источник к стандарту.

gcc -E foo.cpp

Studio Sun также поддерживает этот флаг:

CC -E foo.cpp

, Но еще лучше-xdumpmacros. Можно найти больше информации в документах Солнц.

10
задан JontyMC 2 September 2009 в 17:39
поделиться

2 ответа

Накладные расходы на установление соединения с базой данных

Очень мало, если они находятся в одной подсети, как обычно. Если это не так, то это все еще не огромные накладные расходы, и их можно преодолеть с помощью кэширования, которое есть у большинства ORM ( NHibernate имеет кеширование 1-го и 2-го уровня).

Время, затраченное на отправку данных (потенциально по сети, если на другом сервере)

Для SELECT N + 1 это, очевидно, будет дольше, так как ему придется каждый раз отправлять оператор выбора, который может иметь длину до 1 КБ. Он также должен будет получить новое соединение из пула. Болтливость и коренастость были аргументом в 2002-2003 годах, но сейчас это действительно не имеет большого значения, если только это не действительно большое приложение, в этом случае вам, вероятно, понадобится более опытный (или более высокооплачиваемый) эксперт, высказывающий свое мнение, то есть консультант.

Я бы предпочел объединения, поскольку базы данных будут оптимизированы для этого использования в течение 10 или более лет разработки. Если производительность действительно низкая, View может разобраться с этим или с помощью хранимой процедуры.

Между прочим, SELECT N + 1 , вероятно, является самой распространенной проблемой производительности, с которой люди сталкиваются с NHibernate, когда они впервые начинают его использовать ( включая меня), и это то, что на самом деле требует настройки, чтобы разобраться. Это связано с тем, что NHibernate для ORM - это то же самое, что C ++ для языков.

Пропускная способность

Дополнительный оператор SELECT для каждого клиента в конечном итоге приведет к тому, что количество клиентов объекты * Заказы . Так что для большой системы это может быть заметно, но, как я уже упоминал, ORM обычно имеют механизмы кэширования, чтобы устранить эту проблему. Количество операторов SELECT также не будет таким большим, учитывая:

  • Большую часть времени вы находитесь в той же сети, что и SQL-сервер.
  • Увеличенное количество байтов составляет о дополнительных 0,5-50k дополнительной пропускной способности? Подумайте, как быстро это работает на большинстве серверов.
7
ответ дан 4 December 2019 в 01:02
поделиться

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

4
ответ дан 4 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: