Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Почему это плохая практика, чтобы сделать несколько подключений к базе данных в одном запросе?
Обсуждение Синглетонов в PHP году заставляет меня все больше и больше задумываться над этим вопросом. Большинство людей учат, что вы не должны делать кучу соединений DB в одном запросе, и мне просто любопытно, каковы ваши рассуждения. Моя первая мысль-это затраты на ваш сценарий, чтобы сделать так много запросов к DB, но затем я противопоставляю себя вопросу: не будет ли несколько соединений делать параллельные запросы более эффективными?
Как насчет некоторых ответов (с доказательствами, люди) от некоторых людей в курсе?
Подключения к базе данных-это ограниченный ресурс. Некоторые DBs имеют очень низкий предел соединения, и потеря соединения является серьезной проблемой. Потребляя много соединений, вы можете блокировать другие для использования базы данных.
Кроме того, бросание тонны дополнительных подключений на DB ничего не помогает, если только на сервере DB нет ресурсов, находящихся в режиме ожидания. Если у вас есть 8 ядер и только одно используется для удовлетворения запроса, то, конечно, создание другого соединения может помочь. Однако более вероятно, что вы уже используете все доступные ядра. Кроме того, вы, вероятно, нажмете на один и тот же жесткий диск для каждого запроса DB и добавите дополнительные конфликты блокировки.
Если ваш DB имеет что-то похожее на высокую загрузку, добавление дополнительных соединений не поможет. Это было бы похоже на создание дополнительных потоков в приложении со слепой надеждой, что дополнительный параллелизм ускорит обработку. Это может произойти в некоторых определенных обстоятельствах, но в других случаях это просто замедлит вас, когда вы будете терзать жесткий диск, тратить время на переключение задач и вводить накладные расходы на синхронизацию.
Это стоимость установки соединения, передачи данных и последующего их разрыва. Это съест вашу производительность.
Доказательства труднее найти, но рассмотрим следующее...
Предположим, что для установления соединения требуется x микросекунд.
Теперь вы хотите сделать несколько запросов и получить данные туда и обратно. Допустим, что разница во времени транспортировки пренебрежимо мала между одним соединением и многими (просто ради аргументации).
Теперь предположим, что для закрытия соединения требуется y микросекунд.
Открытие одного соединения займет x+y микросекунд накладных расходов. Открытие многих займет n * (x+y). Это задержит вашу казнь.
Настройка соединения DB обычно довольно тяжелая. Много чего происходит за кулисами (DNS resolution/TCP connection/Handshake/Authentication/Actual Query) .
Однажды у меня была проблема с какой-то странной конфигурацией DNS, из-за которой каждое соединение TCP занимало несколько секунд, прежде чем подняться. Моя процедура входа в систему (из-за сложной архитектуры) заняла 3 различных соединения DB для завершения. С этой проблемой вход в систему занял целую вечность. Затем мы изменили код, чтобы он проходил только через одно соединение.
Мы получаем доступ к Informix из .NET и используем несколько соединений. Если мы не начинаем транзакцию для каждого соединения, она часто обрабатывается в пуле соединений. Я знаю, что это очень специфично для бренда, но большинство(?) доступ cilent систем баз данных будет объединять соединения в меру своих возможностей.
Кроме того, у нас действительно была проблема с подсчетом соединений из-за межбазных соединений. Informix поддерживает синонимы, поэтому мы синонимизировали общих нарушителей, а множественные соединения обрабатывались на стороне сервера, что значительно экономило время передачи, накладные расходы на создание соединений и (реальная суть нашего сайта) лицензионные сборы.
Я бы предположил, что это происходит потому, что ваши запросы не отправляются асинхронно, так как ваши запросы выполняются итеративно на сервере, блокируя каждый раз, вы должны платить за накладные расходы на создание соединения каждый раз, когда вам нужно сделать это только один раз...
В Flex все вызовы веб-служб автоматически вызываются асинхронно, поэтому вы часто видите несколько соединений или запросы в очереди на одно и то же соединение.
Асинхронные запросы снижают стоимость соединения за счет более быстрого запроса / ответа time...because вы не можете легко достичь этого в PHP без некоторой потоковой обработки, тогда снижение производительности больше, чем просто повторное использование того же соединения.
это мои 2 цента...