Pergunta

Qual é a diferença entre gravação sequencial e gravação aleatória no caso de:- 1) sistemas baseados em disco 2) sistemas baseados em SSD [flash de dispositivo

Quando o aplicativo escreve algo e as informações/dados precisam ser modificados no disco, como sabemos se é uma gravação seqüencial ou uma gravação aleatória. Como até este ponto, uma gravação não pode ser distinguida como "sequencial" ou "aleatória" .A gravação é apenas buffer e depois aplicada ao disco quando lavaremos o buffer.

Por favor corrija-me se eu estiver errado.

Foi útil?

Solução

Quando as pessoas falam sobre sequencial vs. aleatória Grava em um arquivo, eles geralmente estão fazendo uma distinção entre escrever sem busca intermediária ("sequencial"), vs. um padrão de busca de busca de gravação-seque-se-marítima-grava, etc. ("aleatória").

A distinção é muito importante nos sistemas tradicionais baseados em disco, onde cada busca de disco levará em torno de 10ms. A gravação sequencial de dados para o mesmo disco leva cerca de 30ms por MB. Portanto, se você gravar sequencialmente 100 MB de dados em um disco, levará cerca de 3 segundos. Mas se você fizer 100 gravações aleatórias de 1 MB cada, isso levará um total de 4 segundos (3 segundos para a escrita real e 10ms*100 == 1 segundo para toda a busca).

À medida que cada gravação aleatória fica menor, você paga cada vez mais uma penalidade para o disco busca. No caso extremo em que você realiza 100 milhões de gravações aleatórias de 1 bytes, você ainda rearra 3 segundos para todas as gravações reais, mas agora você terá 11,57 dias Vale a pena procurar fazer! Tão claramente o grau em que suas gravações são sequenciais vs. aleatórias podem realmente afetar o tempo necessário para realizar sua tarefa.

A situação é um pouco diferente quando se trata de piscar. Com o Flash, você não tem uma cabeça de disco físico que deve se mover. (É daí que os 10ms buscam o custo de um disco tradicional). No entanto, os dispositivos flash tendem a ter grandes tamanhos de página (o menor tamanho de página "típico" é de cerca de 512 bytes de acordo com Wikipedia, e os tamanhos de página em 4K também parecem ser comuns). Portanto, se você estiver escrevendo um pequeno número de bytes, o Flash ainda tem sobrecarga, pois deve ler uma página inteira, modificar os bytes que está escrevendo e, em seguida, escreva de volta a página inteira. Não conheço os números característicos do flash do topo da minha cabeça. Mas a regra geral é que, no flash, se cada uma de suas gravações é geralmente comparável em tamanho ao tamanho da página do dispositivo, você não verá muita diferença de desempenho entre as gravações aleatórias e sequenciais. Se cada uma de suas gravações for pequena em comparação com o tamanho da página do dispositivo, você verá algumas despesas gerais ao fazer gravações aleatórias.

Agora, para tudo isso, é verdade que na camada de aplicativos está oculta de você. Existem camadas no kernel, controlador de disco/flash, etc. Isso pode, por exemplo, interromper a busca não óbvia no meio da sua escrita "seqüencial". Mas, na maioria dos casos, escrever que "parece" seqüencial na camada de aplicativos (sem busca, muita E/S contínua) terá desempenho seqüencial de gravação enquanto escrevia que "parece" aleatório na camada de aplicativo terá o (geralmente pior) desempenho de gravação aleatória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top