El locate
programa findutils
escanea una o más bases de datos de nombres de archivos y muestra las coincidencias. Esto se puede usar como un find
comando muy rápido si el archivo estuvo presente durante la última actualización de la base de datos de nombres de archivo.
Hay muchos tipos de bases de datos hoy en día,
- bases de datos relacionales (con lenguaje de consulta, por ejemplo, SQL),
-
bases de datos orientadas a documentos (por ejemplo, MongoDB)
Base de datos de valores clave (por ejemplo, Redis)
Bases de datos orientadas a columnas (por ejemplo, Cassandra)
Entonces, ¿qué tipo de base de datos updatedb
actualiza y locate
usa?
Gracias.
Respuestas:
Las implementaciones de
locate
/updatedb
generalmente usan bases de datos específicas adaptadas a sus requisitos, en lugar de un motor de base de datos genérico. Encontrará esas bases de datos específicas documentadas por cada implementación; por ejemplo:findutils
'está documentado enlocatedb(5)
, y es prácticamente solo una lista de archivos (con un algoritmo de compresión específico);mlocate
's está documentado enmlocate.db(5)
, y también puede considerarse una lista de directorios y archivos (con metadatos).fuente
locate
son solo estructuras de datos almacenadas en el disco, por lo que pasar de las estructuras de datos a las bases de datos correspondientes es relativamente sencillo. Pasar a las bases de datos cuando su pregunta las presente es otra cosa completamente diferente; Hay libros y cursos dedicados a esos temas. Diseñar y desarrollar un sistema de administración de bases de datos como MongoDB o PostgreSQL es uno de los problemas más difíciles en la ciencia de la computación y la ingeniería de software hoy en día, especialmente cuando se incluye el lado distribuido de las cosas.dlocate
programa en Debian. Terminé descubriendo que simplemente agrupar un archivo de texto era muchas veces más rápido que buscar en un ubicaciónb, y dado el tamaño de los discos en estos días, el ahorro de tamaño de archivo era insignificante. Así que me cambié a grep. También tengo un trabajo cron local que volca mlocate.db en texto sin formato después de que se ejecuta el trabajo cron mlocate, que busco con unqlocate
script de shell local ... mucho más rápido que la ejecuciónmlocate
y también tiene algunas opciones adicionales útiles.Parece ser un archivo plano de estructuras C, escritas / leídas usando las macros OBSTACKS de Gnu LibC
Ver fuentes
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Podrías obtener algo similar con
fuente
find
) desde el/
directorio raíz ( ), sin descender a directorios en otros sistemas de archivos (-xdev
), archivos normales (-type f
), no en*.git
directorios (-not -path \*\.git\/\*
). Comprime output (| gzip -9
) y lo guarda en archivo/tmp/files.gz
(> /tmp/files.gz
). La siguiente línea está buscando elzgrep
archivofile_i_want
dentro del archivo comprimido/tmp/files.gz
Por lo que sé, detrás está Berkeley DB, que es una base de datos clave / valor sin demonio. Sigue el enlace para más información. Extracto de Wikipedia:
La ubicación de la base de datos en RHEL / CentOS es
/var/lib/mlocate/mlocate.db
(no estoy seguro acerca de las otras distribuciones). El comandolocate --statistics
le dará información sobre la ubicación y algunas estadísticas de la base de datos (ejemplo):Para el formato mlocate, aquí está la página principal:
fuente
locate
/updatedb
...mlocate
definitivamente no usa Berkeley DB.