2012-04-09 3 views
-2

У меня есть веб-приложение, в котором мне нужно ввести большой объем данных из файла в формате Excel - скажем, 10 000 строк и 200 столбцов. Затем мне нужно обработать эти данные, а затем вставить/обновить/удалить из базы данных.Обработка больших входных данных в приложении Java

Я попытался сделать это, поместив все в приложение Java-кода, но оказалось, что он слишком медленный.

Может ли кто-нибудь предложить лучший способ этого? Примечание. Я не помещаю эти данные в некоторые классы или объекты. Я просто обрабатываю и обновляю db.

+0

Ваш вопрос кажется немного расплывчатым и выглядит немного скорее как дамп работы, чем что-либо еще. Это помогло бы, если бы вы показали, что у вас есть, иначе вам нелегко ответить на ваш вопрос. _Why_ это слишком медленно. _What_ находится в файле? – Xyene

ответ

2

Предлагаю вам использовать технику потоковой передачи. Используйте Apache Commons FileUpload: http://commons.apache.org/fileupload/streaming.html

, а затем обрабатывать записи один за другим, таким образом вы не будете выделять память. Что нужно учитывать: что произойдет, если ваш процесс разбивается посередине? Используйте транзакции, если это важно для вас. К сожалению, я не могу дать вам советы по чтению формата XLS, но если вы сможете делать CSV, все будет проще - для этого существует несколько библиотек.

Вы можете настроить FileUpload для хранения данных в памяти, на диске или в комбинации .. или вы можете доверять ей, чтобы делать правильные вещи.

0

Непонятно, что происходит в вашем приложении: вы взаимодействуете с пользовательским вводом (выгрузкой) или просто инициализируете приложение? Если это будет позже, обновление данных, безусловно, может быть сделано один раз при установке приложения, а не на этапе запроса. Если это первый, это зависит от многих факторов: как вы читаете данные? Файл IO может быть очень медленным; как вы обновляете базу данных? - Использовать хранимую процедуру? или просто JDBC SQL-предложение. Может быть, какой-то фоновый поток будет лучше, если он кажется слишком медленным для завершения всего процесса.

Смежные вопросы