Hier ist das Problem, das ich habe, ich habe eine Reihe von Protokollen, die ziemlich schnell wachsen können. Sie werden jeden Tag in einzelne Dateien aufgeteilt und die Dateien können leicht zu einem Gig wachsen. Um die Größe gering zu halten, werden Einträge, die älter als 30 Tage sind, gelöscht.Schnelle Text Suche über Logs
Das Problem ist, wenn ich diese Dateien nach einer bestimmten Zeichenfolge durchsuchen möchte. Gerade jetzt ist eine Suche nach Boyer-Moore unausweichlich langsam. Ich weiß, dass Anwendungen wie dtSearch eine sehr schnelle Suche mit Indizierung bieten können, aber ich bin mir nicht sicher, wie ich das implementieren kann, ohne doppelt so viel Speicherplatz in Anspruch zu nehmen wie ein Protokoll.
Gibt es irgendwelche Ressourcen, die ich auschecken kann, die helfen können? Ich bin wirklich auf der Suche nach einem Standardalgorithmus, der erklärt, was ich tun soll, um einen Index zu erstellen und ihn für die Suche zu verwenden.
Bearbeiten:
Grep wird nicht funktionieren, da diese Suche in eine plattformübergreifende Anwendung integriert werden muss. Es gibt keine Möglichkeit, dass ich in der Lage bin, mit einem externen Programm zu spielen.
Die Art, wie es funktioniert, ist, dass es ein Webfrontend gibt, das einen Protokollbrowser hat. Dies spricht mit einem benutzerdefinierten C++ - Webserver-Back-End. Dieser Server muss die Protokolle in einer angemessenen Zeitspanne durchsuchen. Derzeit dauert das Durchsuchen mehrerer Protokolle mehrere Zeit.
Bearbeiten 2: Einige dieser Vorschläge sind großartig, aber ich muss wiederholen, dass ich keine andere Anwendung integrieren kann, es ist Teil des Vertrags. Um jedoch einige Fragen zu beantworten, variieren die Daten in den Protokollen entweder von empfangenen Nachrichten in einem gesundheitsspezifischen Format oder von Nachrichten, die sich auf diese beziehen. Ich bin auf der Suche nach einem Index, da es zwar bis zu einer Minute dauern kann, bis der Index neu erstellt wurde, die Suche dauert jedoch sehr lange (ich habe gesehen, dass sie bis zu 2,5 Minuten dauert). Außerdem werden viele Daten verworfen, bevor sie aufgezeichnet werden. Wenn einige Debugprotokollierungsoptionen nicht aktiviert sind, werden mehr als die Hälfte der Protokollmeldungen ignoriert.
Die Suche läuft im Wesentlichen wie folgt ab: Ein Benutzer im Web-Formular wird mit einer Liste der neuesten Nachrichten präsentiert (gestreamt von der Festplatte, während sie blättern, yay für Ajax), in der Regel wollen sie nach Nachrichten suchen mit einigen Informationen darin, vielleicht einer Patienten-ID oder einer Zeichenfolge, die sie gesendet haben, und so können sie die Zeichenfolge in die Suche eingeben. Die Suche wird asynchron gesendet, und der benutzerdefinierte Webserver durchsucht die Protokolle 1 MB für einige Ergebnisse linear. Dieser Prozess kann sehr lange dauern, wenn die Protokolle groß werden. Und das versuche ich zu optimieren.
Probieren Sie es mit Grep als ein externes Tool aus, wenn es schnell genug ist, können Sie den Gnu Grep Quellcode nehmen und direkt in Ihre App integrieren. – gbjbaanb
Ich würde gerne, aber es ist ein rechtliches Problem, wenn ich es einschließe, habe ich gefragt, diesen Weg zu gehen. – ReaperUnreal