Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

JDBC: эфективная выборка данных

12.09.2013, 18:14. Показов 2642. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо получить много данных (миллионы строк) из субд оракл через jdbc. Как бы это сделать эфективно? Вызовы у ResultSet getObject миллион * кол-во столбцов это будет явно не эфективно
Заметил метод getArray но что-то jdbc оракла которая мне доступна для использования сказала что не умеет она массивы получать. Тоесть что получаеться что не смогу я получить пачкой данные ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2013, 18:14
Ответы с готовыми решениями:

Jdbc Oracle - выборка строк из таблицы
Всем привет. Не можете помочь исправить ошибку в коде. Вот код джава: import java.sql.*; import java.util.ArrayList; import...

JDBC + SQLite вывод данных по запросу
Здравствуйте. Есть база данных SQLite в ней две таблицы, с некоторым количеством тестовых параметров и значений. Задача сделать...

Выборка данных из нескольких таблиц. Аналитическая выборка данных
16 Для каждого отдела выбрать отношение зарплаты и комиссионных сотрудников отдела к объему продаж отдела. 17 *Выбрать список штатов в...

11
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
13.09.2013, 10:21
C fetchSize-ом можно поиграться.
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.09.2013, 12:02
ещё можно сделать хранимку, которая будет возвращать выборку на мильён как CLOB с какими нибудь тегами для отделения рядков и тащить их стримом с обёрткой парсером тегов в массив в цикле
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
17.09.2013, 00:25  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
которая будет возвращать выборку на мильён как CLOB с какими нибудь тегами для отделения рядков и тащить их стримом с обёрткой парсером тегов в массив в цикле
Дописать слово в конце "производительно" уже аж стыдно становиться, да ?
На самом деле я уже делал такое (не CLOB, а просто доставал данные выливая их напрямую по столбцово в массивы, а потом передавал в java), когда данных под 1 млн то с памятью выделенной под джаву становиться туго ... в общем если в двух словах то оно замедляется когда приличных таких записей под 1млн за раз надо хранить как Object[][] и обрабатывать.

На самом деле встретил пока что другую проблему: на сервере то java 1.4, а это значит что я могу использовать только sybase jdbc драйвера версии 2, которые, как оказалось, совсем плохого качества. Например пока я сливаю данные на 3 поля то всё хорошо, а когда взял реальные данные с 17 полями так они слились (драйвера слились) и не смогли пачками по 1000 работать, пришлось уменьшать пачку до 100 записей, более того они работают быстрее с пачкой на 50, а не на 100 (вообще не понял почему так получается что два batchExecute по 50 выполняются быстрее чем один когда в пачке уже 100 записей), а переливать пару миллионов данных с размером пачки 50 записей это будет приличная нагрузка на сервер с сайбейсом.

Ещё иногда драйвера берут и внезапно сливаются и начинают недосылать данные, например запись 600 байт, а они присылают 33, сервер выбрасывает тут же эксепшн "то что обещали != тому что прислали по размерам, вероятно несколько потоков пытаються слать данные", но я то знаю что поток один, я ведь ещё даже на классику producer-consumer не разбивал свой мини проект

В общем разочаровался я в sybase, а заодно разочаровался в тех админах что поставили java 1.4 так как в системе то я поставил уже в path java 1.6 для всех пользователей, но применится она по ходу для оракла это только после перезагрузки сервера.

Добавлено через 1 минуту
В общем можно считать пока тему не актуально пока не получу на сервере java 1.6, тогда попробую применять bcp через sybase драйвера версии 6, те более низкоуровневые операции с данными должны позволить и нормальную пачку запихивать и к тому же быстрее раза в два будет работать.

Добавлено через 1 минуту
KuKu, кстати уже игрался при выборке, но у меня слабое место в итоге insert на sybase ase где особо пачку большую не поставишь. К слову узнал что если меняешь fetchSize то неявный курсор переходит из read only forward (по умолчанию) в update forward + backward что по началу только замедляет если просто только поменять fetch size
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2013, 01:10
Цитата Сообщение от Gepar Посмотреть сообщение
таких записей под 1млн за раз надо хранить как Object[][] и обрабатывать.
у вас же батлнек не в выборке, а в том что вы собираетесь весь лимон в памяти держать, вы думаете я зря про стрим упомянул, обработать на лету и забрать нужное, а не тащить всё в оперу
хотите много объектов в памяти, делайте мап редюс по кластеру

Цитата Сообщение от Gepar Посмотреть сообщение
поставили java 1.4 так как в системе то я поставил уже в path java 1.6 для всех пользователей
всем известно что ява пашет через копипасту откуда угодно, вы просто окружение пропишите и стартуйте шелл скриптом, что за наезды на старенькую 1.4 может она там кому-то нужна, вас то никто не заставляет юзать её

если у вас sybase тормозит, то чего вы ждёте от оракла ) ему ещё больше места надо для счастья, а уже тулить в него яву под которую он не пилился это вообще ССЗБ, только проблем поиметь потом )

хотите относительно шуструю базу на слабых ресурсах - смотрите на постгрик
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
17.09.2013, 08:22  [ТС]
mutagen, да вот оказалось что оракл вызывает таки java что в системе, а в системе 1.4, потому что с ним в папке 1.5. В общем-то все проблемы и начались из-за этого, код то я выполняю из оракла а он по ходу тупо запускает через java ... и натыкается на прописанную в системе на момент его запуска 1.4, если бы у меня на серевере просто было моё java приложение то я уже давно бы папкой под него 1.6 подсунул и горя бы не знал.
Цитата Сообщение от mutagen Посмотреть сообщение
если у вас sybase тормозит, то чего вы ждёте от оракла )
Оракл на другом сервере, там всё хорошо ... а вот сервера под sybase видимо раньше закупались и слабее по железяке.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2013, 11:19
Цитата Сообщение от Gepar Посмотреть сообщение
mutagen, да вот оказалось что оракл вызывает таки java что в системе, а в системе 1.4, потому что с ним в папке 1.5.
это означает что environment для запуска оракла просто не настроено
Цитата Сообщение от Gepar Посмотреть сообщение
давно бы папкой под него 1.6 подсунул и горя бы не знал.
думаю лучше 1.7 так как 1.6 уже не на саппорте и баги никто не чинит
1
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
17.09.2013, 11:41
Если надо пергонять данные из оракл в sybase, то на кой тут вообще java. Используйте dblink оракла.
Цитата Сообщение от Gepar Посмотреть сообщение
mutagen, да вот оказалось что оракл вызывает таки java что в системе, а в системе 1.4, потому что с ним в папке 1.5
Оракл для запуска хранимок использует свою java. Очень много людей хотели бы того, чтобы оракл использовал внешнюю java машину, но это не так.
What is a Java Stored Procedure/ Trigger?
A Java Stored Procedure is a procedure coded in Java (as opposed to PL/SQL) and stored in the Oracle database. Java Stored procedures are executed by the database JVM in database memory space.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
17.09.2013, 22:02  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
это означает что environment для запуска оракла просто не настроено
Ну я установил уже в системе чтобы была 1.6 да только толку с этого, оракл до перезагрузки я так понимаю не подхватит, а перезагружать сервер типа нельзя.

Цитата Сообщение от KuKu Посмотреть сообщение
Используйте dblink оракла.
Да я не против, но у меня в отделе хотели сделать так чтобы это было удобно для регламента и всё такое. Ну проще же дать права на запуск процедуры которая будет принимать два аргумента: строку с выброй из оракла и строку куда инсертить в сайбейс. Сейчас используется dblink, но почему-то им там неудобно им пользоваться (лично я переливкой этих данных не занимаюсь так что не скажу чего неудобно).

Цитата Сообщение от KuKu Посмотреть сообщение
Оракл для запуска хранимок использует свою java. Очень много людей хотели бы того, чтобы оракл использовал внешнюю java машину, но это не так.
What is a Java Stored Procedure/ Trigger?
Ну я читал уже твои сообщения, не подумай что я их пропускаю, просто реалии таковы что установлен оракл 11, прямо в папке с ним я вижу jdk 1.5, но когда запусаю приложения из-под оракла то тянет он java 1.4 установленную в системе для всех пользователей. Я же на практике это всё вижу Сейчас я конечно java для пользователей в системе переопределил, но я не могу перезагрузить сервер чтобы проверить подтянулись ли настройки и для оракла или нет.

Добавлено через 2 минуты
Кстати сравнивал сегодня sybcon 2,3,4 и последней 6ой версии и пришёл к выводам что на java 1.4 для которой есть только первые версии драйверов sybase далеко не уедешь так как insert 10к записей на них 20с, а на последнем sybcon драйвере 2 секунды. Так что тут явно надо либо устанавливать java потом и на боевых серверах чтобы была 1.6 либо забить на эту идею с вызовом java из под оракла для переливки данных.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2013, 22:23
Цитата Сообщение от Gepar Посмотреть сообщение
а перезагружать сервер типа нельзя.
оракл это не сервер, остановить его (а также листенер и тд) и перезапустить не проблема (мало того можно даже стартануть на серваке несколько экземпляров базы и даже разных версий с несколькими или одним листенером - короче много вариантов), но это не тема для java раздела

Цитата Сообщение от Gepar Посмотреть сообщение
просто реалии таковы что установлен оракл 11, прямо в папке с ним я вижу jdk 1.5, но когда запусаю приложения из-под оракла то тянет он java 1.4
реалии таковы что оракл вы(или ваши горе одмины ) запускаете из под несконфигурированного шелла (а возможно ещё и из под рута или левого юзера), вот он и хапает дефолтные системные энвайры

пора уже осознать что *nix системы, а тем более java под ними это вам не винда требующая перезагрузки при смене коврика )

скачайте виртуал бокс образ Oracle Developer Day с сайта оракла и посмотрите как должен быть настроен шелл в системе и пользователь с под которого база стартует
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.09.2013, 00:26  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
оракл это не сервер, остановить его
Это тоже нельзя, лол, там одна боевая программка на тестовом из-за которой нельзя чтобы он не отзывался.

Цитата Сообщение от mutag[quote="mutagen Посмотреть сообщение
запускаете из под несконфигурированного шелла (а возможно ещё и из под рута или левого юзера)
вероятно так и есть, там прямо пользователь oracle есть, под которым я зашёл и вбил java -version что тоже вернуло мне 1.4 в начале.

Цитата Сообщение от mutagen Посмотреть сообщение
пора уже осознать что *nix системы, а тем более java под ними это вам не винда требующая перезагрузки при смене коврика )
Ну так я вот сменил java путь на новую для пользователя оракл, но оракл же это не подхватил, небось ждёт пока перезагрузят его Я вообще не сильно представляю чтобы он на ходу смог переключиться на другую java, у него же часть процедур на java написаны, что же это он их выгрузит на время, а потом заново загрузит ... что-то мне подсказывает что не настолько он умный.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
18.09.2013, 00:34
Цитата Сообщение от Gepar Посмотреть сообщение
Я вообще не сильно представляю чтобы он на ходу смог переключиться на другую java, у него же часть процедур на java написаны, что же это он их выгрузит на время, а потом заново загрузит ... что-то мне подсказывает что не настолько он умный.
ну это естественно ) рестарт кора БД нужен обязательно )
но сконфигурить второй инстанс и стартануть его с листенером на другом порту вам никто не мешает, и вот там уже можно всё сделать правильно и показать админам как оно может летать )

копипаста с нета
Кликните здесь для просмотра всего текста
If you want a second database instance, no additional installation is required - as long as you want to run the second instance at the same version as the the first. Just fire up dbca and create the second database. One installation of Oracle (one ORACLE_HOME) is capable of supporting many database instances, though the same may or may not be said of the hardware it is running on.

As already said, one listener is enough. One listener, running from one oracle home, using the default name of LISTENER, running on the defualt port of 1521, is quite capable of -- indeed, WAS DESIGNED TO, supporte multiple database instances of multiple versions running from multiple ORACLE_HOMEs.

One instance of dbcontrol/dbconsole will support only one database. If you do not use Grid Control (extra installation, extra license) you will need to use the emca utility or one of the options in the dbca utility to configure a seperate instance of dbcontrol for each database. Don't worry about the ports, the creation utility will take care of it and report what it does.

ну и вот тут ещё глянь
http://perumal.org/how-to-run-... le-server/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2013, 00:34
Помогаю со студенческими работами здесь

Дешёвая и эфективная раскрутка сайта
Здравствуйте. Я готов предложит вам прогон: allsubmitter - примерно 2000 белых каталогов с ТиЦ больше 10 sapient social submitter -...

Java + Access bez JDBC-ODBC a srazu 4erez JDBC
Pishu na java.Isplzuju Access.Svazivaju 4erez ODBC-JDBC.A moznlo li na pjramuju svzat 4erez jdbc bez mosta ODBC-JDBC.

Ошибка при подключении к базе данных средствами jdbc
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main { static final...

Ошибка в jdbc+oracle: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Вот такой трабл: на Class.forName('oracle.jdbc.driver.OracleDriver'); отвечает java.lang.ClassNotFoundException:...

Есть ли драйвер, предоставляющий jdbc интерфейс для источника данных в XML?
Вопрос: есть ли драйвер, предоставляющий jdbc интерфейс для источника данных в XML? Такой вообще в природе существует?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru