Enrico Nicoletto
liverig@gmail.com 2012
Rafael Fontenelle
rafaelff@gnome.org 2013-2019

# Buscas em disco são consideradas prejudiciais

Buscas em disco são uma das operações mais custosas que você possivelmente pode realizar. Você pode não saber isto apenas olhando quantas delas realizamos porém, acredite em mim, elas são. Deste modo, por favor abstenha-se deste comportamento abaixo do normal que se segue:

Colocando vários pequenos arquivos sobre todo o disco.

Abrindo, iniciando, e lendo vários arquivos sobre todo o disco

Fazer o que está acima em arquivos que são dispostos em tempos diferentes, garante que os arquivos são fragmentados e causem ainda mais buscas em disco.

Fazer o que está acima em arquivos que estão em diferentes diretórios, garante que os arquivos estão em diferentes grupos de cilindros e causem ainda mais buscas em disco.

Faça repetidamente o que está acima apenas quando for necessário fazer uma única vez.

Modos pelos quais você pode otimizar seu código para realizar pesquisas de forma amigável:

Consolidar os dados em um único arquivo.

Manter os dados juntos no mesmo diretório.

Fazer cache dos dados a fim de não precisar relê-los constantemente.

Compartilhar os dados a fim de não precisar relê-los a partir do disco rígido quando cada aplicativo é carregado.

Considerar fazer cache de todos os dados em um único arquivo binário, o qual está corretamente alinhado e que pode ser mapeado com mmap.

Os problemas com pesquisas em disco são agravados pelas leituras as quais, infelizmente, são o que estamos fazendo. Lembre-se, leituras são geralmente síncronas enquanto escritas são assíncronas. Isto só agrava o problema, serializando cada leitura e contribuindo para a latência do programa.