
Ao acompanhar uma perguntaEUperguntou emStackOverflow, existe algum sistema de arquivos em que os dados sejam gravados "de ponta a ponta" ou "de baixo para cima", em vez de de cima para baixo?
Especificamente, estou procurando (talvez uma maneira específica) de armazenar arquivos de log no formato mais recente (a lacomo os blogs e sites de notícias são organizados, com os mais recentes no topo).
Existe tal fera? Se sim, o que é e onde pode ser encontrado?
Responder1
O que você está pedindo não é apenas um sistema de arquivos “invertido”. Você quer umestruturado por registro, sistema de arquivos “reverso”, ou seja, um sistema de arquivos de registro onde o último registro adicionado aparece primeiro no arquivo. Na verdade, o aspecto inverso provavelmente seria implementado como “você pode inserir um registro antes do primeiro registro existente”.
As interfaces de sistema de arquivos encontradas em sistemas operacionais normalmente encontrados em PCs (Unix, Windows e outros ainda mais exóticos) são estruturadas apenas em bytes - elas não têm noção de registro. Então você está sem sorte.
Uma abordagem possível seria transformar cada entrada de log em um arquivo separado no diretório. Em seguida, percorra o diretório na ordem inversa da hora de criação do arquivo ou na ordem inversa dos nomes, se você fornecer nomes crescentes monotonicamente às entradas de log. Como é provável que você tenha um grande número de entradas de log, certifique-se de usar um sistema de arquivos que suporte bem diretórios grandes (por exemplo, no Linux, reiserfs e ext3 com o dir_index
recurso estão ok, mas ext2 não), ou então use subdiretórios (um para as primeiras 1.000 entradas, uma para as próximas 1.000 e assim por diante).
Outra abordagem seria utilizar um banco de dados mais sofisticado, por exemplo um que você possa consultar em SQL, e apenas selecionar os registros na ordem inversa de sua criação ( SELECT message FROM logs ORDER BY date DESC
).
Responder2
Não tenho certeza se nenhum existe, mas certamente nunca ouvi falar de um. Se isso puder ser feito, creio que haveria algumas desvantagens importantes.
Anexar um arquivo geralmente requer uma cópia completa dos dados existentes. Em um sistema de arquivos, você pode conseguir adicionar um bloco ao início do arquivo, mas isso ainda causa alguns pequenos problemas. Os blocos com espaço livre teriam que manter o espaço livre no início, portanto, muito provavelmente seria necessária uma busca extra por parte da unidade para encontrar o local adequado.
Lidar com espaço livre na unidade, ao trabalhar de trás para frente, se tornaria um grande problema. Isso contradiria a maioria das técnicas de programação, já que você teria que encontrar o índice máximo e voltar a trabalhar a partir daí.
Posso imaginar que ficaria lento em arquivos grandes e seria definitivamente uma coisa ridícula de programar.
Em vez de encontrar um sistema de arquivos reverso, por que você não pode simplesmente escrever o arquivo normalmente e analisá-lo ao contrário? Elabore um esquema básico de formatação de mensagens, leia o arquivo e analise as mensagens dele e, em seguida, exiba-as da última para a primeira. Se você precisar apenas das últimas mensagens, vá até o final do arquivo e depois voltenmensagens. Teria um resultado semelhante, mas com muito menos trabalho e desempenho comparável ou melhor.
Responder3
Você precisa separar as ideias dearmazenarerecuperação. Mesmo nos blogs que você menciona, as entradas provavelmentearmazenadoem ordem cronológica progressiva, masexibidoem ordem cronológica inversa (ignorando o fato de que isso é facilitado pelo uso do armazenamento estruturado).
Seria concebível criar um sistema de armazenamento estruturado simplista que armazenasse entradas na ordem de encaminhamento familiar com "registros" de formato livre e comprimento variável com ponteiros de deslocamento de byte armazenados em um arquivo de recursos em um formato de comprimento fixo (64 bits seriam suporta arquivos de mais de 18 milhões de terabytes). Buscando o último registro ou o nth
registro ou o last - n
registro no arquivo ponteiro, então o byte para o qual ele aponta no arquivo principal seria trivial e rápido. O truque que um sistema de arquivos ou driver especial permitiria seria tornar isso atômico e tornar o arquivo de recurso transparente.
Responder4
Dois pensamentos vêm à mente:
Alguns sistemas de controle de versão armazenam a primeira versão completa do arquivo controlado e todas as versões subsequentes como alterações, enquanto outros armazenam a versão atual completa do arquivo controlado e todas as versões anteriores como alterações.
Se você registrar eventos de tempo de execução em um banco de dados em vez de em um arquivo simples, poderá não ser claro para você se o banco de dados está armazenando eventos sequencialmente, sequencialmente inversamente ou aleatoriamente.