Frage

Hier ist das Problem, das ich habe, ich habe eine Reihe von Protokollen, die ziemlich schnell wachsen können. Sie sind jeden Tag in einzelne Dateien aufgeteilt, und die Dateien können leicht zu einem Gig der Größe wachsen. Um die Größe niedrig zu halten, werden Einträge älter als 30 Tage geräumt.

Das Problem ist, wenn ich diese Dateien nach einer bestimmten Zeichenfolge durchsuchen möchte. Im Moment ist eine Boyer-Moore-Suche unaufhörlich langsam. Ich weiß, dass Anwendungen wie DTSearch eine sehr schnelle Suche mit Indexierung bieten können, aber ich bin mir nicht sicher, wie ich dies implementieren kann, ohne den doppelten Platz einzunehmen, den ein Protokoll bereits nimmt.

Gibt es Ressourcen, die ich überprüfen kann, die helfen können? Ich suche wirklich nach einem Standardalgorithmus, der erklärt, was ich tun soll, um einen Index zu erstellen und ihn zu suchen.

Bearbeiten:
Grep funktioniert nicht, da diese Suche in eine plattformübergreifende Anwendung integriert werden muss. Auf keinen Fall kann ich in der Lage sein, ein externes Programm einzuschließen.

Die Art und Weise, wie es funktioniert, ist, dass es ein Web -Front -End gibt, das einen Protokollbrowser hat. Dies spricht mit einem benutzerdefinierten C ++ Webserver -Backend. Dieser Server muss die Protokolle in angemessener Zeit durchsuchen. Derzeit dauert die Suche nach mehreren Auftritten von Protokollen.

EDIT 2: Einige dieser Vorschläge sind großartig, aber ich muss wiederholen, dass ich eine andere Anwendung nicht integrieren kann, sondern Teil des Vertrags. Um einige Fragen zu beantworten, variieren die Daten in den Protokollen von entweder empfangenen Nachrichten in einem medizinisch-sorgfältigen Format oder Nachrichten, die sich auf diese beziehen. Ich möchte mich auf einen Index verlassen, denn während es bis zu einer Minute dauern kann, um den Index wieder aufzubauen, dauert es derzeit sehr lange (ich habe gesehen, dass es bis zu 2,5 Minuten dauert). Außerdem werden viele Daten verworfen, bevor sie sie überhaupt aufzeichnen. Wenn einige Debug -Protokollierungsoptionen nicht eingeschaltet sind, werden mehr als die Hälfte der Protokollnachrichten ignoriert.

Die Suche ist im Grunde genommen so wie folgt: Ein Benutzer im Webformular wird mit einer Liste der neuesten Nachrichten (von der Festplatte während des Scrollens, yay für Ajax), in der Regel nach Nachrichten mit einigen Informationen in suchen Es, vielleicht eine Patienten -ID oder eine Zeichenfolge, die sie gesendet haben, und damit sie die Zeichenfolge in die Suche eingeben können. Die Suche wird asychron gesendet und der benutzerdefinierte Webserver sucht linear über die Protokolle 1 MB nach anderen Ergebnissen. Dieser Vorgang kann sehr lange dauern, wenn die Protokolle groß werden. Und das versuche ich zu optimieren.

War es hilfreich?

Lösung

Schauen Sie sich die Algorithmen an, die Lucene verwendet, um seine Sache zu tun. Sie sind jedoch wahrscheinlich nicht sehr einfach. Ich musste einige dieser Algorithmen einmal einmal untersuchen, und einige von ihnen sind sehr raffiniert.

Wenn Sie die "Wörter" in dem Text identifizieren können, den Sie indexieren möchten, erstellen Sie einfach eine große Hash -Tabelle der Wörter, die ein Hash des Wortes in den Ereignissen in jeder Datei ordnet. Wenn Benutzer dieselbe Suche häufig wiederholen, zwischen den Suchergebnissen zwischen den Suchergebnissen unternen. Wenn eine Suche durchgeführt wird, können Sie jeden Ort überprüfen, um zu bestätigen, dass der Suchbegriff dort fällt, anstatt nur ein Wort mit einem passenden Hash.

Wen interessiert es auch, ob der Index größer ist als die Dateien selbst? Wenn Ihr System wirklich so groß ist, ist mit so viel Aktivität ein paar Dutzend Gigs für einen Index am Ende der Welt?

Andere Tipps

grep Normalerweise funktioniert für mich mit großen Protokollen (manchmal 12 g+) ziemlich gut. Sie finden eine Version für Windows hier auch.

Sie möchten höchstwahrscheinlich eine Art Indexierungssuchmaschine in Ihre Anwendung integrieren. Es gibt Dutzende da draußen, Lucene scheint sehr beliebt zu sein. Überprüfen Sie diese beiden Fragen auf einige weitere Vorschläge:

Beste Text -Suchmaschine für die Integration in die benutzerdefinierte Web -App?

Wie implementiere ich Suchfunktionen auf einer Website?

Weitere Details zur Art der Suche, die Sie durchführen, können definitiv helfen. Warum möchten Sie sich insbesondere auf einen Index verlassen, da Sie ihn jeden Tag wieder aufbauen müssen, wenn sich die Protokolle umgehen? Welche Art von Informationen enthält diese Protokolle? Kann ein Teil davon weggeworfen werden, bevor es jemals einmal aufgezeichnet wird?

Wie lange dauern diese Suchanfragen jetzt?

Möglicherweise möchten Sie die Quelle für BSD überprüfen grep. Möglicherweise können Sie sich nicht darauf verlassen, dass Grep für Sie da ist, aber nichts sagt, dass Sie ähnliche Funktionen nicht nachbilden können, oder?

Splunk ist großartig, um viele Protokolle zu durchsuchen. Kann für Ihren Zweck übertrieben sein. Sie zahlen gemäß der Datenmenge (Größe der Protokolle), die Sie verarbeiten möchten. Ich bin mir ziemlich sicher, dass sie eine API haben, sodass Sie ihr Front-End nicht verwenden müssen, wenn Sie nicht wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top