O locate
programa findutils
verifica um ou mais bancos de dados de nomes de arquivos e exibe todas as correspondências. Isso pode ser usado como um find
comando muito rápido se o arquivo estiver presente durante a última atualização do banco de dados de nomes de arquivos.
Atualmente, existem muitos tipos de bancos de dados,
- bancos de dados relacionais (com linguagem de consulta, por exemplo, SQL),
-
bancos de dados orientados a documentos (por exemplo, MongoDB)
Banco de dados de valores-chave (por exemplo, Redis)
Bancos de dados orientados a colunas (por exemplo, Cassandra)
Então, que tipo de banco de dados é updatedb
atualizado e locate
usado?
Obrigado.
Respostas:
As implementações de
locate
/updatedb
normalmente usam bancos de dados específicos personalizados para seus requisitos, em vez de um mecanismo de banco de dados genérico. Você encontrará os bancos de dados específicos documentados por cada implementação; por exemplo:findutils
'está documentadolocatedb(5)
e é basicamente apenas uma lista de arquivos (com um algoritmo de compactação específico);mlocate
está documentadomlocate.db(5)
e também pode ser considerado uma lista de diretórios e arquivos (com metadados).fonte
locate
são apenas estruturas de dados armazenadas no disco, portanto, passar das estruturas de dados para os bancos de dados correspondentes é relativamente simples. Mover para bancos de dados conforme sua pergunta os apresentar é outra coisa completamente; existem livros e cursos dedicados a esses tópicos. Projetar e desenvolver um sistema de gerenciamento de banco de dados como o MongoDB ou o PostgreSQL é hoje um dos problemas mais difíceis da ciência da computação e da engenharia de software, especialmente quando você joga o lado distribuído das coisas.dlocate
programa no debian. Acabei descobrindo que apenas o preenchimento de um arquivo de texto era muitas vezes mais rápido do que pesquisar em um localb, e, dado o tamanho dos discos hoje em dia, a economia no tamanho do arquivo era insignificante. Então eu mudei para apenas grep. Eu também tenho um trabalho cron local que despeja mlocate.db em texto sem formatação após a execução do trabalho cron mlocate, que procuro com umqlocate
script de shell local .... muito mais rápido que em execuçãomlocate
e também possui algumas opções extras úteis.Parece ser um arquivo simples de estruturas C, gravado / lido usando as macros do Gnu LibC OBSTACKS
Ver fontes
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Você pode obter algo semelhante com
fonte
find
) no/
diretório raiz ( ), sem descer para diretórios em outros sistemas de arquivos (-xdev
), arquivos regulares (-type f
), e não nos*.git
diretórios (-not -path \*\.git\/\*
). Comprime a saída (| gzip -9
) e salva no arquivo/tmp/files.gz
(> /tmp/files.gz
). Linha seguinte é pesquisar comzgrep
para o arquivofile_i_want
dentro do arquivo compactado/tmp/files.gz
Tanto quanto eu sei por trás é Berkeley DB, que é o banco de dados sem daemon chave / valor. Siga o link para mais informações. Extrato da Wikipedia:
A localização do banco de dados no RHEL / CentOS é
/var/lib/mlocate/mlocate.db
(não tenho certeza sobre as outras distribuições). O comandolocate --statistics
fornecerá informações sobre a localização e algumas estatísticas do banco de dados (exemplo):Para o formato mlocate, aqui está a página principal do manual:
fonte
locate
/updatedb
...mlocate
definitivamente não usa o Berkeley DB.