Какой самый быстрый способ получить большой объем данных из базы данных Oracle в объекты Java - PullRequest
3 голосов
/ 16 февраля 2012

Какой самый быстрый способ получить большой объем данных из базы данных Oracle в объекты Java.

Есть ли у Oracle какие-либо хитрости относительно порядка организации данных?

Iдумал об использовании простого JDBC, а не каких-либо библиотек стилей Hibernate?

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

Все мысли оценены.

Ответы [ 3 ]

4 голосов
/ 17 февраля 2012

Я не эксперт по Java или JDBC, но если вы планируете вытягивать много строк из базы данных, вы, вероятно, выиграете, увеличив строки предварительной выборки в соединении.

Connection conn = DriverManager.getConnection ("jdbc:oracle:","user","password"); 

//Set the default row prefetch setting for this connection 
((OracleConnection)conn).setDefaultRowPrefetch(100); 

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

1 голос
/ 17 февраля 2012

Что бы вы ни делали, спроектируйте / реализуйте "отложенную инициализацию" [на самом деле применимо только для сложных иерархий / сетей объектов; вы сказали java объекты (множественное число), поэтому я представляю нечто большее, чем просто одну таблицу, которая отображается на один объект]. Итак, в основном, вы читаете только те объекты, которые необходимы в то время; когда вы запускаете метод получения, он выполняет больше вызовов БД только для этих данных.

Еще одна хитрость, которую иногда упускают из виду в мире Java: если у вас есть какой-то сложный sql, исходящий из кода, вы можете скорее создать представление на стороне Oracle, внедрив в него эту сложность, а затем сопоставить свой объект с представлением; так что если вы можете выровнять свой объект как вид, то вы в бизнесе.

1 голос
/ 16 февраля 2012

В зависимости от того, как далеко вы хотите зайти с этим, я мог бы представить, что jdbc удалится и напишет специальное приложение, расположенное на той же машине, что и БД, с использованием Oracle Call API , и JNI будет самым быстрым.

Вероятно, гораздо проще просто использовать простую подготовленную оценку с использованием JDBC, а затем, если этого недостаточно (и в зависимости от того, где находится горлышко бутылки), попытаться выполнить хранимую процедуру.Кэширование, выполняемое ORM, например, Hibernate, не следует сбрасывать со счетов, поэтому, я думаю, вам придется выполнить некоторые тесты.Также, если узким местом является база данных, и вы пишете хранимую процедуру, которая улучшает производительность чтения, тогда вы все равно можете использовать Hibernate для упорядочения данных в объекты Java.См. Использование хранимых процедур для запросов

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