LINUX.ORG.RU

Fetch huge data from MySQL in java


0

0

Вот такая возникла проблема:

есть очень большая таблица MyISAM . Нужно из джавы вытащить все данные, то есть выполнить простой запрос: "select * from mtable" . Наблюдаю два случая:

1. просто выполняю запрос -- JDBC драйвер пытается вытащить все данные сразу -- получаю OutOfMemory . 2. Выставляю fetch size у PreparedStatement. Сервер начинает создавать большие файлы во временной директории и у меня заканчивается место на диске.

Помогите спасите ))

как вариант написать программу на C которая через mysql C API будет небольшими кусками читать данные и передавать их через Java Native Interface (JNI) в жабу. использую такое, но c postgresql.

progman
()

а как насчет костыля используя конструкцию LIMIT?

:))))))))))))))))))))))

den_skipper
()
Ответ на: комментарий от dimon555

Да, это намного лучше, чем LIMIT. С последним на чтении последних кусоков данных в огромных выборках будут феерические тормоза.

KRoN73 ★★★★★
()

А нету функции забирать не всё сразу а постепенно по мере отдачи данных мусклем? На уровне mysql такое есть и в питоне оно поддерживается(fetchmany). Думаю и в жабе есть подобные функции.

true_admin ★★★★★
()
Ответ на: комментарий от dimon555

Они реализуются либами. В питоне mysqldb поддерживает курсоры. В доках сказано как это реализовано.

true_admin ★★★★★
()

Сам этим никогда из жабы не пользовался, но вот тут пишуть:

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-implementation-n...

"If you are working with ResultSets that have a large number of rows or large values, and can not allocate heap space in your JVM for the memory required, you can tell the driver to stream the results back one row at a time.", blah blah blah

может это поможет?

gods-little-toy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.