Улучшение производительности предварительной обработки большого набора документов
Я работаю над проектом, связанным с платформой обнаружения плагиата с использованием Java. Мой набор документов содержит около 100 документов, и я должен предварительно обработать их и сохранить в подходящей структуре данных. У меня большой вопрос, как мне эффективно обработать большой набор документов и избежать узких мест. Основное внимание на мой вопрос заключается в том, как улучшить производительность предварительной обработки.
Спасибо
С уважением, Нуван
2 ответа
Вам немного не хватает специфики там. Соответствующая оптимизация будет зависеть от таких вещей, как формат документа, средний размер документа, то, как вы их обрабатываете, и какую информацию вы храните в своей структуре данных. Не зная ни одного из них, некоторые общие оптимизации:
Если предположить, что предварительная обработка данного документа не зависит от предварительной обработки любого другого документа, и если вы работаете с многоядерным ЦП, то ваша рабочая нагрузка является хорошим кандидатом для многопоточности. Выделите один поток на ядро процессора и перенесите задания в свои потоки. Затем вы можете обрабатывать несколько документов параллельно.
В общем, делайте как можно больше в памяти. Старайтесь избегать чтения с / записи на диск в максимально возможной степени. Если вам необходимо выполнить запись на диск, попробуйте подождать, пока у вас есть все данные, которые вы хотите записать, а затем запишите все это в одном пакете.
Вы даете очень мало информации, чтобы сделать какие-либо хорошие предложения.
По умолчанию я обрабатываю их с помощью исполнителя с пулом потоков с тем же числом потоков, что и у ядер на вашем компьютере, каждый поток обрабатывает документ.