2015-10-28 3 views
1

Я бы хотел спросить экспертов о том, какая рекомендация для извлечения 3000-5000 записей из базы данных oracle 11g из приложения Java (с использованием JDBC). Наш стандарт - всегда вызывать хранимую процедуру.Java JDBC - Oracle11g Sys Ref Cursor Vs pl/sql collections

Я провел некоторое исследование и обнаружил, что курсор ref делает несколько обращений к базе данных на основе свойства подсчета JDBC. (Кто-то может пролить больше света на это из конца в конец потока, как данные хранятся в памяти в оракула и JVM при обработке реф курсоры)

Я думал коллекции являются более эффективными, поскольку данные передаются в одном выстрелил вызывающему (Java) из oracle db (используйте массовый сбор). При таком подходе мы можем избежать множества сетевых вызовов от Java до серверов Oracle. это истинное предположение?

Цените свою помощь!

ответ

0

Это гораздо более важная тема, чем кто-либо, желающий совершить сделку в проводке. Вот ссылка, которая обсуждает, как Oracle manages read consistency. Вероятно, эта страница целиком прочитана, чтобы получить представление о том, что происходит на сервере. Также есть статья here, в которой обсуждается, что происходит с использованием коллекций. Как бы вы вернули коллекцию клиенту JDBC (не то, что я когда-либо пробовал)?

По существу, есть много участвует в производительности, от того, как база данных настроена на то, как ваша сеть настроена на производительность диска, на производительность клиента и т.д.

Короткий ответ вы должны попробовать вещи. Получить 3-5k записей не так много, и это зависит от того, насколько велика запись, что вы возвращаете по сети. Если они составляют 20-байтовые записи, а размер вашей сети (MTU?) Составляет 4 тыс. Блоков, вы можете разместить около 200 записей в блоке. В какой-то момент вы сталкиваетесь с законом уменьшения прибыли.

Я использую хранимые процедуры в качестве привычки, но вам не нужно. Это будет зависеть от сложности запроса (количества таблиц и типа объединений) и возможности для того, чтобы кто-то вроде DBA мог войти и посмотреть, что делает запрос.

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

Смежные вопросы