Voici le problème que j'ai, j'ai un ensemble de journaux qui peuvent se développer assez rapidement. Ils sont divisés en fichiers individuels chaque jour, et les fichiers peuvent facilement atteindre une taille de concert. Pour réduire la taille, les entrées de plus de 30 jours sont supprimées.Recherche de texte rapide sur les journaux
Le problème est lorsque je veux rechercher ces fichiers pour une certaine chaîne. En ce moment, une recherche Boyer-Moore est irrémédiablement lente. Je sais que des applications comme dtSearch peuvent fournir une recherche très rapide en utilisant l'indexation, mais je ne suis pas vraiment sûr de savoir comment l'implémenter sans prendre deux fois plus d'espace qu'un log.
Y a-t-il des ressources que je peux consulter pour vous aider? Je suis vraiment à la recherche d'un algorithme standard qui expliquera ce que je devrais faire pour construire un index et l'utiliser pour chercher.
Edit:
Grep ne fonctionnera pas comme cette recherche doit être intégrée dans une application multi-plateforme. Il n'y a aucun moyen que je sois capable de balancer y compris n'importe quel programme externe dedans. La façon dont cela fonctionne est qu'il y a une interface Web qui a un navigateur de journal. Cela parle à un backend de serveur Web C++ personnalisé. Ce serveur doit rechercher les journaux dans un délai raisonnable. Actuellement, la recherche à travers plusieurs concerts de journaux prend des âges.
Éditer 2: Certaines de ces suggestions sont excellentes, mais je dois réitérer que je ne peux pas intégrer une autre application, cela fait partie du contrat. Mais pour répondre à certaines questions, les données contenues dans les journaux diffèrent à partir des messages reçus dans un format spécifique à la santé ou des messages les concernant. Je cherche à me fier à un index car, même si cela peut prendre jusqu'à une minute pour reconstruire l'index, la recherche prend actuellement beaucoup de temps (je l'ai vu prendre jusqu'à 2,5 minutes). En outre, beaucoup de données sont rejetées avant même d'être enregistrées. À moins que certaines options de journalisation du débogage soient activées, plus de la moitié des messages du journal sont ignorés. La recherche se résume à ceci: Un utilisateur sur le formulaire Web est présenté avec une liste des messages les plus récents (diffusés à partir du disque pendant qu'ils défilent, yay pour ajax), généralement, ils veulent rechercher des messages avec quelques informations, un identifiant de patient ou une chaîne qu'ils ont envoyée, afin qu'ils puissent entrer la chaîne dans la recherche. La recherche est envoyée de manière asynchrone et le serveur Web personnalisé recherche linéairement dans les journaux 1 Mo à la fois pour obtenir des résultats. Ce processus peut prendre beaucoup de temps lorsque les journaux deviennent gros. Et c'est ce que j'essaie d'optimiser.
Essayez-le avec grep comme un outil externe, si c'est assez rapide, vous pouvez prendre le code source gnu grep et l'intégrer directement dans votre application. – gbjbaanb
Je voudrais, mais c'est un problème juridique si je l'inclue, j'ai demandé à ce sujet. – ReaperUnreal