Как быстрее распаковать в Java? - PullRequest
1 голос
/ 15 марта 2011

В нашей системе возникла проблема с слишком большим количеством файлов, которые используются в веб-приложении, которое следует использовать постоянно.Это означает, что файлы не могут быть удалены, и их слишком много, что замедляет работу системы (которая является Windows).Мы хотели бы заархивировать файлы, и когда файл является запросом, мы распаковываем конкретный файл.

Я пробовал класс java ZipFile, и производительность не достаточно хорошая, потому что будет много людей, использующих веб-приложение, и они будут запрашивать файлы.По моим наблюдениям, действие по расстегиванию молнии требует времени от 0,5 с до 2 с, а когда слишком много пользователей, система не может их догнать.

Например, я использую Jmeter для имитации ситуации, когда 30 пользователей используют систему со случайной задержкой от 0,3 до 0,6 с.Хотя я сомневаюсь, что запросов может быть не так много, я не могу знать заранее, сколько людей будет использовать веб-приложения.Я хотел бы спросить вас, ребята, есть ли другой способ решить эту проблему?

Заранее спасибо !!

PS Если нужна какая-либо сторонняя библиотека, она должна быть бесплатной!

PS Поскольку количество файлов слишком велико, и машина зависает.Мы бы хотели сделать это: заархивировать файл 2000 в zip-файл, тогда количество файлов уменьшится и будем надеяться, что система больше не зависнет, а при необходимости мы распакуем какой-нибудь файл.

Ответы [ 3 ]

3 голосов
/ 15 марта 2011

Хорошо, вот несколько мыслей. Мне кажется, что ваша основная проблема - это медлительность вашей системы, и вы пытаетесь ее исправить, сжимая файлы и распаковывая их по требованию. Затем вы обнаружили, что декомпрессия слишком медленная, и вам нужен более быстрый способ сделать это.

Теперь я не полностью уверен, почему вы думаете, что это сжатие будет ускорять, а не замедлять.

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

Если проблема связана со слишком большим количеством файлов в каталоге, подумайте о разделении на несколько каталогов. Но я понятия не имею, есть ли у NTFS такая проблема (у FAT). Например, если у вас есть каталог с файлами для каждой минуты за последние десять лет (пять миллионов файлов), вы можете разделить их на дневные каталоги (три с половиной тысячи каталогов с полторы тысячи файлов в каждой).

Сжатие не уменьшит число файлов, только пространство, занимаемое ими.

Если проблема связана с количеством файлов в системе (а не в каталоге), существует множество способов разделения файлов между системами. Например, выделите 10% всего файла на десяти разных компьютерах и перенаправьте входящие запросы для определенного файла на соответствующий компьютер.

Но, я должен сказать, я видел, что машины Windows обрабатывают абсолютную загрузку файлов, поэтому я был бы очень удивлен, если бы проблема заключалась в этом. Я думаю, вы, вероятно, просто должны будете отследить, что на самом деле вызывает ваши "зависания".

1 голос
/ 15 марта 2011

Если zip не обеспечивает выигрыша в производительности (несмотря на встроенную реализацию в Java), вы можете попытаться улучшить его на уровне файловой системы.Папки со слишком большим количеством (> 10000) файлов не работают хорошо в некоторых файловых системах Windows, поэтому попробуйте разделить файлы на несколько папок, настроить файловую систему NTFS (размер кластера, зарезервированное пространство для файловой системы), отключить антивирус, отключить индексирование,купить жесткий диск SSD SLC ...

1 голос
/ 15 марта 2011

сжатие / распаковка файлов не сделает окна быстрее.

...