Насколько дорого обходится приложение -> вызов БД? (т. е. Java JDBC -> Oracle)? - PullRequest
2 голосов
/ 22 февраля 2012

На моем рабочем месте всегда есть аргумент "сделать все на уровне службы приложений", а не "делать все в процедуре БД".

То, что я получаю, заставляет сервер приложений и БД общаться слишком часто, это довольно дорогооперация.У меня вопрос - насколько это дорого?

Скажем, у нас есть этот пример - у меня есть список пользователей в моем Java-приложении, и мне нужно привязать определенный атрибут к каждому из них.Допустим, есть 20 пользователей и 20 атрибутов для хранения.Насколько дороже сделать 20 вызовов процедуры Oracle с использованием параметров (employee_id, attribute_value) вместо одного вызова и одновременной отправки всех employee_ids и их соответствующих attribute_values?

edit:

Ладно, может быть, я не четко изложил свой случай - я его немного "ошеломлю":)

Насколько дороже сделать n обращений к процедуре Oracle, которая выполняет 1 вставкувместо того, чтобы делать 1 вызов процедуры Oracle, которая делает n вставок (где n вставок в основном циклически повторяют 1 вставку n раз)?Причина, по которой это делается в n вызовах, а не в 1, состоит в том, что для новичка определенно проще написать цикл в Java, который выполняет n вызовов процедур с простыми типами данных в качестве входных объектов (например, целое число, varchar2 и т. Д.), Чем думатьспособа передачи массива из Java в Oracle.

1 Ответ

3 голосов
/ 22 февраля 2012

Вы должны рассматривать каждый случай, как дорого получать данные. Зависит от SLA, которого вы придерживаетесь. В приведенном вами примере, если не все пользователи одновременно вошли в ваше приложение и «атрибут» имеет разные значения для каждого пользователя, нет смысла извлекать все это за один раз. Однако если некоторые вышеприведенные атрибуты представляют статические данные, имеет смысл кэшировать их в приложении и использовать кэшированные данные.

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

Что касается того, насколько это будет дорого, если вы используете источник данных и пул соединений (которые почти все apss используют в наши дни), и если вы используете подготовленный оператор, используйте операторы BULK COLLECT в своих процедурах или если вы используете спящий режим (используйте оптимальный размер выборки), он не должен быть очень дорогостоящим. Отношение определенно не является линейным, т. Е. Оно не будет стоить вам 20 раз за один звонок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...