поиск результатов по столбцу

У меня есть проблема с набором результатов из большой базы данных. (MySQLDB, Java 1.7)

Задача состоит в том, чтобы выполнить преобразование всех записей одного столбца в другую базу данных. (например, разделите каждое число на три и запишите их в другую базу данных)

Поскольку база данных содержит около 70 столбцов и несколько миллионов строк, моим первым подходом было бы получить SELECT * и проанализировать набор результатов по столбцам.

К сожалению, я не нашел способа разобрать его таким образом, поскольку назначенный способ намеревается пройти через него по строкам (while (rs.next ()) {} и т. Д.).

Мне это не нравится, поскольку это создало бы 70 больших массивов, у меня было бы только одно время, чтобы уменьшить использование памяти.

Итак, вот мои основные вопросы:

  1. Есть ли способ?
  2. Должен ли я создавать запрос для каждого столбца и анализировать их (один массив за раз, но 70 запросов) или
  3. Должен ли я просто получить весь ResultSet и разобрать его по строкам, записав их в 70 массивов?

Приветствуем и благодарим заранее!

0
добавлено отредактировано
Просмотры: 1
de
Вы действительно имеете в виду другую базу данных или просто другую таблицу ?
добавлено автор jlordo, источник
это очень актуально, потому что, если это просто другая таблица, вы можете использовать базу данных для выполнения задания. Это будет очень эффективно, и вам не нужен какой-либо код java вообще (за исключением того, что вы хотите, чтобы Java выполнял операторы sql).
добавлено автор jlordo, источник
это актуально? но вы правы, это, по сути, просто еще одна таблица
добавлено автор Maltram, источник

2 ответы

Почему не просто страница ваших запросов ? Вытягивайте строки «n» за раз, выполняйте преобразование, а затем записывайте их в новую базу данных.

Это означает, что вы не втягиваете все в один запрос/итерацию, а затем пишете всю партию за один раз, и у вас нет неэффективности работы по строкам.

Мой другой комментарий - возможно, это преждевременная оптимизация. Вы пытались загрузить весь набор данных и посмотреть, сколько памяти потребуется. Если это порядка 10 или даже 100 мегабайт, я бы ожидал, что JVM справится с этим легко.

Я предполагаю, что ваша трансформация должна быть выполнена на Java. Если вы можете сделать это в SQL, то сделать это полностью в базе данных, вероятно, будет еще более эффективным.

2
добавлено
Мой подход предполагает настраиваемое количество запросов. Если вы на странице, вы можете выбрать размер страницы (например, 500 строк?), Чтобы вы загружали заданный объем данных, а затем записывали каждый набор в одну пакетную операцию. Изменение размера страницы определяет: a) объем памяти, потребляемой за запрос; б) количество записей в db
добавлено автор Brian Agnew, источник
Меня не волновало размер набора результатов, а размер 70 массивов (который, как я полагаю, должен быть меньше, чем набор результатов). Но ваш подход предполагает много ошибок, что приводит к увеличению трафика. Прямо сейчас я не уверен, какой ресурс - шея бутылки (движение или память)
добавлено автор Maltram, источник

Почему бы вам не сделать это только с mysql.

используйте этот запрос:

create table <table_name> as select /3 from <table name>;
0
добавлено
Потому что «/ 3» был всего лишь примером, и преобразование намного сложнее ... Я думал об этом, но я не уверен, что это возможно. Я дам ему еще одну попытку, хотя
добавлено автор Maltram, источник
Хорошо ... Дайте нам знать, если вы все еще сталкиваетесь с какой-либо проблемой.
добавлено автор Sushil Jain, источник