Массовый импорт данных в Java-приложении - PullRequest
0 голосов
/ 14 февраля 2011

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

  • Определенно, одним из вариантов является использование java-приложения, вызывающего хранимую процедуру.
  • Второй вариант, который я могу придумать, так как мы уже используем spring, пара spring-jdbc тоже может нам помочь.
  • В настоящее время мы используем пару spring-hibernate, чтобы сделать это науровень приложения (я полагаю, это неправильный подход)

Не могли бы вы помочь мне с некоторыми мыслями с другого конца спектра?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

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

В случае Oracle SQLLoader (как предложено @Pangea)

В случае MS SQL Server BCP (Bulk Copy)

Если вы ищете подход, основанный на Java, то я повторяю @Pangea В дополнение к этому Вы можете разбить пакетную вставку на подпартии и запустить их одновременно для лучшей производительности.

Пример: Если у вас есть 10k записей для вставки, вы можете создать пакеты по 200 записей в каждой и одновременно вставить 5 пакетов.

В этом случае вам нужен код для отслеживания каждой подпакеты.

Надеюсь, это поможет!

0 голосов
/ 14 февраля 2011

Лучший вариант - использовать встроенную поддержку БД при выполнении массовых операций с огромными данными. Если Oracle, то SQL * Loader . Если Postgres, то у них есть команда COPY .

Если вы ищете специфичные для Java опции, то ниже приведен мой порядок предпочтений

  1. JDBC: используйте поддержку пакетных операций , но это имеет ограничение, что любой сбой в пакетной операции приведет к короткому замыканию всего потока

  2. Hibernate: ORM не предназначены для этого. Однако вы можете использовать StatelessSession и пакетную конфигурацию вместе для достижения оптимальной производительности.

...