Как эффективно (время) записать огромное количество данных в файл?
Привет всем. Я начинающий Java разработчик и мне нужен совет спецов. Есть задача: есть обработка огромного (очень) количества файлов (поиск, индексирование и т.д). В процессе необходимо делать запись в файл (ну я так решаю поставленную задачу) 10^6 - 20^6 строк (инфа о файлах). Посоветуйте как это сделать быстрей всего по времени.
Буду очень благодарен за помощь).
сделать тестовый прогон и посмотреть какое место системы работает бутылочным горлышком.
если затык в записи на носитель применить сжатие данных.
если затык в обработке результатов, то поставить проц помощнее.
если затык в получении кучи информации о файлах, то ускорить файловую систему.
и т.д. и т.п.
EVGENY T., используют :) но обычно втупую деньги вбрасывают - обновляют носитель или рейд0 ставят. это же кручее.
как бы это странно не смотрелось, но самый показательный пример - сжатие видео и звука :) редкий носитель сможет записать raw 1080p60 поток, а вот сжатый вполне себе даже недорогие пишут.
Извините, сжимать данные для ускорения - первый раз встречаюсь с такой идеей со времен модемов на 2400 бод. Реально где-то такое сейчас применяется?
Например, на этой странице. Content-Encoding: gzip.
Если диск - реально узкое место (а это чертовски вероятно), то сжатие однообразных строк (то есть в несколько раз), несомненно, ускорит процесс.
Причем я сильно подозреваю, что в Java это сжатие обойдется программисту в одну-две строчки (создание сжимающей обертки вокруг потока вывода).
А еще можно применить распределенную обработку.... и посмотреть в сторону hadoop например или spark, hazelcast, ingine.
Ну и как написал в комментарии к ответу pfg21 - применять сжатие lz4 или snappy