Cadenas Inteligentes

Más
6 años 8 meses antes #17773 por MiguelMS
Respuesta de MiguelMS sobre el tema Cadenas Inteligentes
Ya he visto varias noticias cuando busqué al ver este mensaje :)


He estado estos días intentando probar ideas de optimizaciones para reducir el tiempo de búsqueda del programa. ¿Alguna idea que se te ocurriera que se pudiera probar? (conste que no lo ponía de broma en el mensaje anterior). He estado también midiendo el tiempo que tarda en ejecutar aquí, pero no significa que en tu ordenador tarde lo mismo, es sólo como referencia al intentar aplicar optimizaciones.

La ejecución del programa, tal cual, sin optimizaciones, me da un tiempo de unos 5,5 a 6 segundos por cada hora de diferencia entre la fecha dada y la fecha del archivo. (Es decir, se tardarían unos 5,5 segundos en encontrar, por ejemplo, un archivo con fecha de 20/10/2013 19:00 si la fecha obtenida en el portapapeles es 20/10/2013 20:00.

He intentado optimizar la búsqueda usando una base de datos con las fechas en las que no hay ningún archivo, y finalmente ha resultado que eso es más lento que preguntar directamente al sistema de archivos (como se hace actualmente), da un tiempo de entre 7 y 8 segundos por cada hora de diferencia. Quizá funcione y sirva de algo si el disco está muy ocupado, pero en otros casos no ayuda. Lo dejaré como una opción, pero desactivada por defecto y sin que sea muy recomendable activarla :(

Lo siguiente que estoy probando ayer y hoy es optimizar la búsqueda usando una base de datos con los intervalos de fechas en los que no hay ningún archivo. Esto hace que atravesar esos intervalos sea inmediato, aunque la primera vez que se pasa por ese intervalo, el tiempo aumenta a unos 8 segundos por hora de diferencia. Las siguientes veces que se pasa por un intervalo previamente "analizado" es inmediato.

Quizá lo interesante sería hacer una primera indización, descubrir todos los intervalos en un principio antes de realizar ninguna búsqueda (en lugar de ir descubriendo los intervalos cuando se hace la primera búsqueda en ellos). Sin embargo, esa indización llevaría tieeeeeempo y por eso quizá siga siendo mejor descubrirlos sobre la marcha.


El algoritmo de búsqueda por archivos (en lugar de por fechas como hasta ahora) de momento requiere añadir a las opciones una expresión regular, posiciones y rellenados de los nombres de archivos (además del patrón actual). No está ni siquiera escrito completamente, así que no tengo referencias de tiempo, pero seguramente una primera búsqueda en la que haya que analizar el nombre de todos los archivos de una o más carpetas, obtener la fecha correspondiente, calcular la diferencia con la fecha del portapapeles y hallar la mínima diferencia sea lento. Sin embargo, una vez realizada la primera búsqueda, si se guardan los datos de cada archivo en la base de datos, podría ser bastante más rápido obtener el resultado, sólo teniendo que obtener las diferencias y hallar la mínima.

Con este último algoritmo el tiempo de búsqueda dependería de la cantidad de archivos, no de la diferencia entre la fecha dada y la fecha del archivo más próximo.


En fin, como decía, se admiten ideas de algoritmos y optimizaciones. :)

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Más
6 años 8 meses antes #17775 por Perseverante
Respuesta de Perseverante sobre el tema Cadenas Inteligentes
Los tiempos de ocho segundos no son llevaderos.
Lo de indexar en backgrounds las principaleas agrupaciones de carpetas me parece buena idea. Tengo memoria para eso. De esa manera sólo los pantallazos recientes o fotos descargadas al ordenador estarían fuera del índice.
De todas formas creo que el criterio pudiera ser este :
- si hay indexación el tiempo de localización ha de ser menor a un segundo.
- Si no hay indexación se abrirá la carpeta destino al segundo con el registro último escaneado.

:P

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Más
6 años 8 meses antes #17783 por MiguelMS
Respuesta de MiguelMS sobre el tema Cadenas Inteligentes

Perseverante escribió: Los tiempos de ocho segundos no son llevaderos.


La próxima versión tiene una opción de cronometrar el tiempo que tarda en ejecutarse una búsqueda, eso dará una idea de los tiempos que se producen en tu ordenador respecto a los que yo estoy observando, porque podrían ser distintos.

Pero vamos, no te hagas muchas ilusiones, que tampoco espero que vaya yo a conseguir (y más en un lenguaje interpretado, como AutoIt) un programa que supere a los programas de búsquedas habituales, porque no me parece que ni aún usando indización, las búsquedas de Windows respondan tan rápido, y esas sólo buscan propiedades indizadas, aquí en cualquier caso hay que calcular las diferencias con esas propiedades y buscar la menor de todas... :whistle:

Lo de indexar en backgrounds las principaleas agrupaciones de carpetas me parece buena idea. Tengo memoria para eso. De esa manera sólo los pantallazos recientes o fotos descargadas al ordenador estarían fuera del índice.
De todas formas creo que el criterio pudiera ser este :

- si hay indexación el tiempo de localización ha de ser menor a un segundo.


Esto ya ocurre en la próxima versión, si la búsqueda se realiza en un intervalo ya "analizado" anteriormente, como decía, la búsqueda es inmediata (0,01 o 0,02 seg).

El problema es el proceso de indización, que como decía, llevaría tieeeeeeempo... Y como AutoIt no es multihilo, no es una "operación en background", ni es posible interrumpirla de buena manera sin una probabilidad de dañar la base de datos que esté siendo creada... :huh:

Si no hay indexación se abrirá la carpeta destino al segundo con el registro último escaneado.


Esto ya lo puedes hacer incluso en la versión actual utilizando el límite por diferencia de tiempo. Introduce el tiempo en segundos que suponga en tu ordenador la búsqueda y transcurrido ese intervalo de búsqueda, se abandonará y se ejecutará el comando de fallo.

Por ejemplo, si en mis pruebas la búsqueda de una hora (3600 seg) duraba entre 5 y 6 segundos, pon un límite de 1200 o 1500 segundos, que supuestamente durará más o menos dos segundos. Por supuesto, esos tiempos pueden ser distintos en tu ordenador.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Más
6 años 8 meses antes #17784 por Perseverante
Respuesta de Perseverante sobre el tema Cadenas Inteligentes
Dichosos multihilos.
De todas formas si lo logras sería un gran programa.
En estos momentos estoy dando un fuerte impulso a mis blogs para posicionarlos.
Y al final resulta ser muy práctico capturar imágenes libres en el buscador de imágenes google y documentarlas mediante linknotes.
Así que yo ya estoy preparando todo como si linknotes fuera la realidad que va a ser.

La verdad es que cosas hechas de corazón como canarias sin ruidos o salva tu playa me están siendo de mucha ayuda de futuro para marketing y posicionamiento.
Esta semana pasada me fui a un cursillo de control de calidad de las aguas muy interesante con la casa hanna.es
En fin. Que la vida sigue y espero a la nueva versión para practicar y practicar.
:laugh:

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Más
6 años 8 meses antes #17813 por MiguelMS
Respuesta de MiguelMS sobre el tema Cadenas Inteligentes

Dichosos multihilos.


Es una limitación gorda de AutoIt, y según pone en la página web es una de las cosas que se pide habitualmente pero que no quieren añadirlo...

De todas formas si lo logras sería un gran programa.


Estuve intentando hacer unos programas .exe distintos, separados del propio ejecutable de LinkNotes. El programa principal de LinkNotes los hubiera ejecutado cuando se solicitara (re)construir el índice. Sin embargo, al final no los he llegado a terminar, ya que al probar el primero de ellos vi que al no poder ser detenidos correctamente antes de que terminen, había muchas papeletas de dañar la base de datos (lo cual implica errores y problemas variados y extraños en LinkNotes). Además de que esos programas no sabrían en que intervalos y carpetas vas a buscar tu, luego tendrían que indizar todo el tiempo y todos los archivos, lo cual tardaría un montón (sin poder pararlo a la mitad) y sería en su mayor parte innecesario.

Así que recuerda: la primera búsqueda dentro de un intervalo de tiempo o una carpeta concreta tardará aproximadamente el mismo tiempo que ahora (algo menos, por algunos cambios), pero las búsquedas siguientes en los mismos intervalos o carpetas deberían ser más rápidas.

Así que yo ya estoy preparando todo como si linknotes fuera la realidad que va a ser.


Eso de "vender la piel del oso antes de cazarlo"... :D

Acabo de terminar la nueva versión. El algoritmo de búsqueda por archivos y la optimización de la indización de archivos previos ya funcionan... A ver que resultado dan... En esta parte realmente tendrás que probar tu el rendimiento, ya que al depender de la cantidad de archivos, en tus carpetas se comportará de forma distinta a las que tengo yo aquí para las pruebas, probablemente más pequeñas. Para esto el programa tiene una nueva opción de cronometrar las búsquedas y mostrar el tiempo una vez que ha encontrado un archivo.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Más
6 años 8 meses antes #17814 por MiguelMS
Respuesta de MiguelMS sobre el tema Cadenas Inteligentes
Hola de nuevo :)

Te he enviado al correo la nueva versión del programa con un mónton de cambios en el código y bastantes nuevas características.


Los cambios más destacados en esta versión respecto a la anterior:
  • Se ha mejorado el algoritmo de "Búsqueda por fechas" (no contando las optimizaciones). En mis pruebas, las búsquedas ahora tardan casi la mitad de tiempo.
  • Se ha añadido la optimización de intervalos inexistentes a la búsqueda por fechas. Con esta mejora, tras la primera búsqueda en un intervalo de tiempo determinado, las siguientes búsquedas en el mismo intervalo serán inmediatas. Para utilizar esta optimización, debe activarse la casilla "Búsqueda por fechas: caché de intervalos inexistentes" en la pestaña "Algoritmos" de la ventana de edición de procesos. Nótese que la "caché de intervalos inexistentes" se vacía automáticamente si se cambia el patrón de la carpeta o el archivo del proceso.
  • Se ha añadido el algoritmo de "Búsqueda por archivos". La velocidad de búsqueda de este algoritmo depende de la cantidad de archivos que haya en la carpeta de búsqueda. Ten en cuenta que la nueva búsqueda por archivo requiere que introduzcas en los datos del proceso de búsqueda la expresión regular del nombre del archivo (y que sea correspondiente con el patrón del archivo ya existente en versiones previas), así como la posición de los datos de la fecha en la expresión regular del archivo y si han de rellenarse con ceros. Si estos datos no son correctos, la búsqueda por archivos no será capaz de encontrar el archivo adecuado.
  • Se ha añadido la optimización de indización de archivos a la búsqueda por archivos. Con esta mejora, tras la primera búsqueda en una carpeta determinada, las siguientes búsquedas en las mismas carpetas serán bastante más rápidas. Para utilizar esta optimización, debe activarse la casilla "Búsqueda por archivos: indización de archivos" en la pestaña "Algoritmos" de la ventana de edición de procesos.
  • Se ha añadido la nueva opción "Cronometrar la búsqueda", situada en la pestaña "Algoritmos" de la ventana de edición de procesos. Al activar esta opción, al término de una búsqueda se muestra el tiempo en milisegundos que ha tardado en realizarse la búsqueda. Recuerda volver a desactivar esta opción cuando hayas terminado de hacer pruebas. Ten en cuenta que el tiempo no será correcto (será mayor que el verdadero tiempo de búsqueda) si el programa se ha detenido en algún mensaje de error.


En resumen, yo lo que haría la primera vez que utilices la nueva versión del programa es lo siguiente:
  1. Antes de intentar hacer ninguna búsqueda, pulsa con el botón derecho del ratón sobre el icono del programa junto al reloj y escoge la opción "Editar procesos". En la ventana de "Edición de procesos", cambia a la nueva pestaña "Algoritmos".
  2. En la pestaña "Algoritmos", selecciona el algoritmo de búsqueda que quieras utilizar: "Por fechas" o "Por archivos". El de fechas es el que había en las versiones anteriores, y el de archivos es el nuevo, más rápido, salvo que la carpeta contenga muchos archivos.
  3. En la misma pestaña "Algoritmos", activa las opciones "Búsqueda por fechas: caché de intervalos inexistentes" y "Búsqueda por archivos: indización de archivos". No actives la de "Búsqueda por fechas: caché de fechas inexistentes" salvo que quieras probarla específicamente en tu ordenador, ya que esta opción sólo acelera la búsqueda por fechas si el problema era una excesiva carga de trabajo en el sistema de archivos o en el disco por parte de otros programas.
  4. En la pestaña "Algoritmos", opcionalmente activa la casilla "Cronometrar búsqueda" si quieres que se muestren los tiempos de búsqueda.
  5. En todas las pestañas de "Procesos" que estés utilizando actualmente, introduce la expresión regular correspondiente al nombre del archivo (al estilo de la opción de "Patrón de archivo", pero esta vez usando el formato de expresión regular), los números de bloques de los componentes de la fecha en la expresión regular del archivo y si los componentes deben ser rellenados con ceros. Rellenar esta expresión regular quizá sea lo que te cause más problema; si así fuera, indícame los patrones de archivo de los procesos que estés utilizando y te respondo con las expresiones regulares correspondientes.
  6. Una vez que hayas hecho estos cambios, pulsa "Aceptar" para cerrar la ventana de edición de procesos guardando las nuevas opciones.
  7. Ahora ya puedes realizar búsquedas, al igual que hacías con las versiones anteriores, a ver que tal resultado da la nueva versión. Recuerda que la primera búsqueda en un intervalo de tiempo (si se usa el algoritmo de fechas) o una carpeta concreta (si se usa el algoritmo de archivos) tardarán un tiempo determinado. Las siguientes búsquedas en esos mismos intervalos o carpetas ya aprovecharán las optimizaciones y serán más rápidas.


Te muestro algunos ejemplos de tiempos en mis pruebas:
  • Búsqueda por fechas para una diferencia de dos horas sin optimizaciones o primera búsqueda: 11 segundos.
  • Búsqueda por fechas para una diferencia de dos horas con optimización de intervalos: 4 a 7 milisegundos.
  • Búsqueda por archivos para una carpeta con dos archivos sin optimizaciones o primera búsqueda: 40 a 45 milisegundos.
  • Búsqueda por archivos para una carpeta con dos archivos con optimización de indización: 10 a 12 milisegundos.


Suerte, espero que la nueva versión funcione bien :)
El siguiente usuario dijo gracias: Perseverante

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Tiempo de carga de la página: 0.325 segundos
Gracias a Foro Kunena