Este es el problema que tengo, tengo un conjunto de registros que pueden crecer con bastante rapidez. Se dividen en archivos individuales todos los días, y los archivos pueden crecer fácilmente en un concierto de tamaño. Para ayudar a mantener el tamaño reducido, las entradas de más de 30 días se borran.Búsqueda rápida de texto en los registros
El problema es cuando quiero buscar estos archivos para una cierta cadena. En este momento, una búsqueda de Boyer-Moore es irrealmente lenta. Sé que las aplicaciones como dtSearch pueden proporcionar una búsqueda realmente rápida mediante la indexación, pero no estoy seguro de cómo implementar eso sin ocupar el doble del espacio que un registro ya ocupa.
¿Hay algún recurso que pueda verificar que pueda ayudar? Realmente estoy buscando un algoritmo estándar que explique lo que debo hacer para construir un índice y usarlo para buscar.
Editar:
Grep no funcionará ya que esta búsqueda debe integrarse en una aplicación multiplataforma. No hay forma de que pueda cambiar, incluyendo cualquier programa externo.
La forma en que funciona es que hay una interfaz web que tiene un navegador de registro. Esto habla con un backend de servidor web C++ personalizado. Este servidor necesita buscar los registros en un tiempo razonable. Actualmente, la búsqueda a través de varios conciertos de registros demora años.
Editar 2: Algunas de estas sugerencias son geniales, pero tengo que reiterar que no puedo integrar otra aplicación, es parte del contrato. Pero para responder algunas preguntas, los datos en los registros varían entre mensajes recibidos en un formato específico de atención médica o mensajes relacionados con estos. Estoy buscando confiar en un índice porque aunque puede llevar hasta un minuto reconstruir el índice, actualmente la búsqueda lleva mucho tiempo (lo he visto demorar hasta 2.5 minutos). Además, muchos datos se descartan incluso antes de grabarlos. A menos que algunas opciones de registro de depuración estén activadas, más de la mitad de los mensajes de registro se ignoran.
La búsqueda básicamente es la siguiente: un usuario en el formulario web presenta una lista de los mensajes más recientes (transmitidos desde el disco mientras se desplazan, yay para ajax), generalmente, querrán buscar mensajes con algo de información, tal vez una identificación del paciente, o alguna cadena que hayan enviado, para que puedan ingresar la cadena en la búsqueda. La búsqueda se envía de forma asíncrona y el servidor web personalizado busca linealmente a través de los registros 1 MB a la vez para obtener algunos resultados. Este proceso puede llevar mucho tiempo cuando los registros crecen. Y es lo que estoy tratando de optimizar.
pruébelo con grep como una herramienta externa, si es lo suficientemente rápido puede tomar el código fuente de gnu grep e integrarlo directamente en su aplicación. – gbjbaanb
Me gustaría, pero es un problema legal si lo incluyo, he preguntado sobre seguir ese camino. – ReaperUnreal