Оптимизация MySQL против множества плоских файлов и использования жесткого диска

Этот код отлично работает, чтобы автоматически загрузить файл с контроллера Spring при нажатии ссылки на jsp.

@RequestMapping(value="/downloadLogFile")
public void getLogFile(HttpSession session,HttpServletResponse response) throws Exception {
    try {
        String filePathToBeServed = //complete file name with path;
        File fileToDownload = new File(filePathToBeServed);
        InputStream inputStream = new FileInputStream(fileToDownload);
        response.setContentType("application/force-download");
        response.setHeader("Content-Disposition", "attachment; filename="+fileName+".txt"); 
        IOUtils.copy(inputStream, response.getOutputStream());
        response.flushBuffer();
        inputStream.close();
    } catch (Exception e){
        LOGGER.debug("Request could not be completed at this moment. Please try again.");
        e.printStackTrace();
    }

}
2
задан Micah 16 January 2019 в 06:38
поделиться

2 ответа

Вау!

Несколько лет назад у нас были огромные проблемы в популярных CMS. По равнине в основном хорошие показатели. Но он меняется вниз, когда появляются боковые проходы.

Итак, я написал несколько уродливых строк, чтобы найти самый быстрый способ. Обратите внимание, что ресурсы, устанавливающие различные пределы!

1-й) Я использовал время для установления прямой адресной точки. У каждого есть свой набор плоских файлов.

2) Я сделал рамдиск. Убедитесь, что у вас достаточно для вашего проекта!

3-ий) Для резервного копирования я использовал rsync и renundance, сжатый / извлеченный в Ramdisk в tar.gz

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

Окончательный выпуск приводит к обработке из:

PHP / MySQL> 5 с Perl / HDD ~ 1,2 с Perl / RamDisk ~ 0,001 с

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

Жесткий диск будет жить намного дольше, ваш рабочий процесс может быть оптимизирован с помощью прямой адресации. Это доступно с других этапов. Скажем, вы можете работать на этой основе и из других скриптов. Как вы полагаете, обработка данных в R, извещатель из оболочки или что-то еще ...

Ошибки буферизации, такие как MySQL, больше не нужны. Ваш процессор больше не зацикливается.

0
ответ дан user10993497 16 January 2019 в 06:38
поделиться

Файловая система может интерпретироваться как иерархическое хранилище значений ключей, и ее часто используют в программах Unix. Однако создание файлов может быть довольно дорогостоящим, в зависимости от используемой ОС и файловой системы. В частности, различные файловые системы значительно различаются в зависимости от масштаба времени доступа с количеством файлов в одном каталоге. Например. см. Производительность NTFS и большие объемы файлов и каталогов и Как вы справляетесь с большим количеством маленьких файлов? : «Производительность NTFS сильно ухудшается после 10000 файлов в каталоге».

Таким образом, вы можете увидеть значительные преимущества, перейдя от псевдобазы данных, использующей миллионы небольших файлов, к «реальной» базе данных, такой как SQLite, которая хранит данные в одном файле, что делает доступ к отдельным записям более дешевым.

С другой стороны, 2 миллиона записей - это не так много, что говорит о том, что издержки файловой системы не могут быть для вас ограничивающим фактором. Попробуйте запустить программное обеспечение с тестовой рабочей нагрузкой и использовать профилировщик или другие средства отладки, чтобы узнать, на что тратится время. Это действительно open(), что занимает так много времени? Или есть другая дорогостоящая обработка, которая может быть оптимизирована? Если есть этап предварительной обработки, который можно распараллелить, он один может значительно сократить время обработки.

0
ответ дан amon 16 January 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: