Différence entre écriture séquentielle et en écriture aléatoire

Quelle est la différence entre écriture séquentielle et aléatoire écrire en cas de :- 1) systèmes basés sur le disque 2)disques SSD [Flash de l'Appareil ] systèmes à base de

lorsque l'application écrit quelque chose et que l'information/les données doivent être modifiées sur le disque, alors comment savoir s'il s'agit d'une écriture séquentielle ou d'une écriture aléatoire.Comme jusqu'à ce point une écriture ne peut pas être distinguée comme "séquentielle" ou "aléatoire".L'écriture est juste tamponnée et ensuite appliquée sur le disque quand nous allons tirer la chasse tampon.

s'il vous Plaît corrigez-moi si je me trompe.

29
demandé sur Kaizen 2010-01-20 13:23:26

1 réponses

Quand les gens parlent de séquentiel et aléatoire écrit à un fichier, ils font généralement une distinction entre l'écriture sans recherche intermédiaire ("séquentielle"), par opposition à un modèle de recherche-écriture-recherche-écriture-recherche-écriture-recherche-écriture, etc. ("aléatoire.)"

la distinction est très importante dans les systèmes disk-based traditionnels, où chaque recherche de disque prendra environ 10ms. L'écriture séquentielle des données sur ce même disque prend environ 30ms par Mo. Donc, si vous séquentiellement Ecrire 100 Mo de données sur un disque, cela prendra environ 3 secondes. Mais si vous faites 100 écritures aléatoires de 1MB chacune, cela prendra un total de 4 secondes (3 secondes pour l'écriture réelle, et 10ms*100 == 1 seconde pour toutes les recherches).

Comme chaque écriture aléatoire devient plus petite, vous payez plus et plus d'une pénalité pour le disque cherche. Dans le cas extrême où vous effectuez 100 millions d'écritures aléatoires de 1 octet, vous aurez toujours net 3 secondes pour toutes les Écritures réelles, mais vous avez maintenant 11,57 jours la peine de chercher à faire! Donc clairement le degré de vos écritures séquentielles vs aléatoire peut vraiment affecter le temps nécessaire pour accomplir votre tâche.

La situation est un peu différente quand il s'agit de flash. Avec flash, vous n'avez pas de tête de disque physique que vous devez déplacer. (C'est là que le coût de 10ms seek vient pour un disque traditionnel). Cependant, les dispositifs flash ont tendance à avoir de grandes tailles de page (la plus petite taille "typique" de page est d'environ 512 octets selon wikipédia, et les formats de page de 4K semblent être communs aussi bien). Donc, si vous écrivez un petit nombre d'octets, flash a toujours la tête en ce sens que vous devez lire une page entière, modifier les octets que vous écrivez, et puis écrire en arrière la page entière. Je ne connais pas les nombres caractéristiques pour flash sur le dessus de ma tête. Mais la règle de base est que sur flash si chacune de vos Écritures est généralement comparable dans la taille de la page de l'appareil, alors vous ne verrez pas beaucoup différence de performances entre aléatoire et écritures séquentielles. Si chacune de vos Écritures est petite par rapport à la taille de la page de l'appareil, alors vous verrez un certain overhead en faisant des écritures aléatoires.

Maintenant, pour tout ce qui précède, il est vrai qu'au niveau de la couche application est caché. Il y a des couches dans le noyau, le contrôleur de disque/flash, etc. cela pourrait par exemple interjecter des recherches non évidentes au milieu de votre écriture "séquentielle". Mais dans la plupart des cas, l'écriture qui semble "" séquentielle à la couche application (no seeks, lots of continuous I/O) aura la performance séquentielle-écriture tandis que l'écriture qui "regarde" aléatoire à la couche application aura la performance (généralement pire) aléatoire-écriture.

68
répondu Will Robinson 2010-03-18 16:41:07