Вот проблема у меня, у меня есть набор журналов, которые могут расти довольно быстро. Они делятся на отдельные файлы каждый день, и размер файлов может легко увеличиться. Чтобы уменьшить размер, записи старше 30 дней очищаются.
Проблема в том, что я хочу найти в этих файлах определенную строку. Прямо сейчас поиск Бойера-Мура невыносимо медленный. Я знаю, что такие приложения, как dtSearch, могут обеспечить действительно быстрый поиск с использованием индексации, но я не совсем уверен, как реализовать это, не занимая вдвое больше места, чем уже занимает журнал.
Могу ли я проверить какие-либо ресурсы, которые могут помочь? Я действительно ищу стандартный алгоритм, который объяснит, что я должен сделать, чтобы построить индекс и использовать его для поиска.
Edit:
Grep не будет работать, так как этот поиск необходимо интегрировать в кроссплатформенное приложение. Я никак не смогу включить в нее любую внешнюю программу.
То, как это работает, заключается в том, что есть веб-интерфейс с браузером журналов. Это говорит с пользовательским бэкэндом веб-сервера C ++. Этот сервер должен искать журналы в разумные сроки. В настоящее время поиск по нескольким выступлениям журналов занимает много времени.
Редактировать 2:
Некоторые из этих предложений хороши, но я должен повторить, что не могу интегрировать другое приложение, это часть контракта. Но чтобы ответить на некоторые вопросы, данные в журналах могут отличаться от полученных сообщений в специальном формате здравоохранения или сообщений, относящихся к ним. Я полагаюсь на индекс, потому что, хотя перестройка индекса может занять до минуты, поиск в настоящее время занимает очень много времени (я видел, что это занимает до 2,5 минут). Кроме того, многие данные отбрасываются еще до их записи. Если не включены некоторые параметры ведения журнала отладки, более половины сообщений журнала игнорируются.
Поиск в основном происходит следующим образом: пользователю в веб-форме представлен список самых последних сообщений (передаваемых с диска по мере их прокрутки, yay для ajax), обычно они хотят искать сообщения с некоторая информация в нем, возможно, идентификатор пациента или какая-то строка, которую они отправили, чтобы они могли ввести эту строку в поиск. Поиск отправляется асинхронно, и пользовательский веб-сервер линейно просматривает журналы по 1 МБ за раз для получения некоторых результатов. Этот процесс может занять очень много времени, когда журналы становятся большими. И это то, что я пытаюсь оптимизировать.