В нашем приложении, разработанном java-j2ee, нам нужно импортировать записи из загруженного файла с клиента. Содержимое файла будет выглядеть следующим образом:
id,email,name,last-name,text
1,[email protected],John,Lives in LA
... миллиард таких записей в файле.
в то время как процесс загрузки происходит на клиенте, необходимо регулярно обновлять ход процесса.
Мы можем загрузить файл правильно, но затем для вставки всех записей в него также делается. Но теперь мы хотим, чтобы это произошло как можно скорее.
Предлагаемые подходы,
Пожалуйста, предложите.
Если вы хотите поистине кратчайшее время, скопируйте файл в куски на сервер с помощью базы данных (возможно, используя реализацию Java SCP, если она доступна), а затем выполните свою версию DB LOAD DATA INFILE
(что соответствует MySQL).
Более разумный подход - это просто вставки в пакет.
Предлагаемые подходы: использование многопоточности, JMS
Наверное, это не поможет. JMS не решает этого, и параллелизм не поможет, когда вы привязаны к IO (размер трубы или скорости дисков действительно то, что вы получаете).
Изменение: вы можете увидеть преимущества многопоточности, если у вас есть один поток читателей, который читает файл и другой поток писем, который выполняет доступ к БД (производитель/потребитель). Причина, по которой это может помочь, заключается в том, что вы всегда читаете, и вы всегда пишете. Если вы напишете это правильно, вы сможете создать несколько потоков вставки, чтобы попытаться запустить его параллельно и посмотреть, помогает ли он.