web-dev-qa-db-fra.com

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

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

Lorsque l'application écrit quelque chose et que les informations/données doivent être modifiées sur le disque, comment savoir si c'est une écriture séquentielle ou une écriture aléatoire. Jusqu'à ce stade, une écriture ne peut pas être distinguée comme "séquentielle" ou "aléatoire" L'écriture est juste mise en mémoire tampon, puis appliquée au disque lorsque nous viderons la mémoire tampon.

S'il vous plait corrigez moi si je me trompe.

39
Kaizen

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

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

À mesure que chaque écriture aléatoire diminue, vous payez de plus en plus une pénalité pour la recherche de disque. Dans le cas extrême où vous effectuez 100 millions d'écritures aléatoires sur 1 octet, vous aurez toujours net 3 secondes pour toutes les écritures réelles, mais vous auriez maintenant 11,57 jours vaut la peine de chercher à faire! Il est donc clair que le degré auquel vos écritures sont séquentielles ou aléatoires peut vraiment affecter le temps nécessaire pour accomplir votre tâche.

La situation est un peu différente en matière de flash. Avec flash, vous n'avez pas de tête de disque physique que vous devez déplacer. (C'est de là que vient le coût de recherche de 10 ms pour un disque traditionnel). Cependant, les périphériques flash ont tendance à avoir de grandes tailles de page (la plus petite taille de page "typique" est d'environ 512 octets selon wikipedia , et les tailles de page 4K semblent également être courantes). Donc, si vous écrivez un petit nombre d'octets, flash a toujours un surcoût dans la mesure où vous devez lire une page entière, modifier les octets que vous écrivez, puis réécrire la page entière. Je ne connais pas les chiffres caractéristiques du flash sur le dessus de ma tête. Mais la règle générale est que sur flash si chacune de vos écritures est généralement de taille comparable à la taille de page de l'appareil, vous ne verrez pas beaucoup de différence de performances entre les écritures aléatoires et séquentielles. Si chacune de vos écritures est petite par rapport à la taille de la page de l'appareil, vous verrez des frais généraux lors des écritures aléatoires.

Maintenant, pour tout ce qui précède, il est vrai qu'au niveau de la couche application, beaucoup de choses vous sont cachées. Il y a des couches dans le noyau, le contrôleur de disque/flash, etc. qui pourraient par exemple intercepter des recherches non évidentes au milieu de votre écriture "séquentielle". Mais dans la plupart des cas, une écriture qui "semble" séquentielle à la couche application (pas de recherche, beaucoup d'E/S continues) aura des performances d'écriture séquentielle tandis qu'une écriture qui "semble" aléatoire à la couche application aura (généralement pire) performances d'écriture aléatoire.

88
Will Robinson