Qu'est-ce qu'un SSTable?

Réponses:

105

Le tableau des chaînes triées (emprunté à google) est un fichier de paires de chaînes clé / valeur, triées par clés

Schildmeijer
la source
4
Merci pour une autre excellente réponse SO Cassandra! BTW, avez-vous vu cette question: stackoverflow.com/questions/2573106/…
knorv
Est-ce généralement immuable?
Dean J
1
oui, les sstables sont immuables par conception - ce qui est une fonctionnalité géniale
Schildmeijer
Comment peut-il être à la fois trié et immuable alors?
xjcl
56

"Un SSTable fournit une carte immuable persistante et ordonnée des clés aux valeurs, où les clés et les valeurs sont des chaînes d'octets arbitraires. Des opérations sont fournies pour rechercher la valeur associée à une clé spécifiée et pour parcourir toutes les paires clé / valeur dans un plage de clés spécifiée. En interne, chaque SSTable contient une séquence de blocs (en général, chaque bloc a une taille de 64 Ko, mais cela est configurable). Un index de bloc (stocké à la fin de SSTable) est utilisé pour localiser les blocs; l'index est chargé en mémoire lorsque le SSTable est ouvert. Une recherche peut être effectuée avec une seule recherche de disque: nous trouvons d'abord le bloc approprié en effectuant une recherche binaire dans l'index en mémoire, puis en lisant le bloc approprié sur le disque. En option, un SSTable peut être complètement mappé en mémoire, ce qui nous permet d'effectuer des recherches et des analyses sans toucher au disque."

zhouchonghz SUR gmail.com
la source
4
"sans toucher le disque" -> "sans savoir que le disque est touché". Les E / S mappées en mémoire sont une technique très pratique car elles délèguent les E / S réelles au système d'exploitation, en supposant qu'il puisse faire un bon travail de mise en cache (en particulier lorsque plusieurs processus partagent le même fichier). Mais cela présente l'inconvénient que vous n'en avez pas le contrôle. Si la page n'est pas résidente en mémoire, le thread bloquera et ne pourra pas effectuer d'autres opérations; comparez-le avec "async IO", où vous pouvez enregistrer un rappel et faire d'autres choses dans le même thread, pendant que l'IO est en attente.
ithkuil
2
@ithkuil: Vous pouvez absolument avoir le contrôle des E / S mappées en mémoire au moins au point de pouvoir vous assurer que certaines pages sont en mémoire ou ont été validées sur le disque (il y a encore de la marge pour les pages qui ne sont pas garanties d'être dans mémoire mais très bien pourrait être). C'est ce que sont des choses merveilleuses comme mlock (), msync () et MAP_LOCKED. Vous pouvez également comprendre ce qui est actuellement et ce qui n'est pas paginé via mincore ().
Christopher Smith
2
@ChristopherSmith: oui vous avez raison, il existe des moyens de le contrôler. Cependant, il est généralement utilisé pour les sections de performances critiques (en temps réel) ou les problèmes liés à la sécurité (comme éviter qu'un mot de passe en mémoire ne soit échangé sur le disque). Les fichiers mappés en mémoire sont très utiles, précisément parce que vous n'avez pas à décider de la quantité d'entre eux à conserver en mémoire; sinon, vous pourriez simplement lire le fichier entier en mémoire sans mmap et obtenir le même effet. En fait, je viens de parcourir le code cassandra; le seul appel est mlockall(MCL_CURRENT);effectué au démarrage. Voir aussi: goo.gl/AEgPM
ithkuil
4
La citation ci-dessus est tirée du papier BigTable .
ShreevatsaR
4

Une tablette est stockée sous forme de SSTables.

SSTable (directement mappé à GFS) est un stockage immuable basé sur des valeurs clés. Il stocke des morceaux de données, chacun est de 64 Ko.

Définitions:

  • Index des clés: clé et emplacement de départ
  • Le bloc est une unité de stockage dans GFS, la gestion des répliques se fait par bloc
manjit singh
la source
3
  • SSTable (engl. Sorted Strings Table) est un fichier de paires de chaînes clé / valeur, triées par clés.

  • Un SSTable fournit une mappe immuable persistante et ordonnée des clés aux valeurs, où les clés et les valeurs sont des chaînes d'octets arbitraires.

  • En interne, chaque SSTable contient une séquence de blocs (généralement,
    chaque bloc a une taille de 64 Ko, mais cela est configurable).

Miksiii
la source