mutable storageMode = "ligne"
_ramStorageTabWatcher = {
let currentStorageMode = "ligne";
const watcher = createTabsetWatcher(
".ram-storage-tabset",
{ "Stockage en ligne": "ligne", "Stockage en colonne": "colonne" },
(value) => {
if (currentStorageMode === value) return;
currentStorageMode = value;
mutable storageMode = value;
}
);
invalidation.then(() => watcher.destroy());
return null;
}
ramTableData = parseTableData("#ram-col-data-source table")
renderRamGraph = {
const graph = createRamStorageGraph("ram-col-graph-container", storageMode, "Salaire", ramTableData, { autoStart: false });
invalidation.then(() => graph?.destroy?.());
return {
start: () => graph?.start?.(),
pause: () => graph?.pause?.(),
reset: () => graph?.reset?.(),
restart: () => graph?.restart?.()
};
}
ramPlaybackControl = createSimulationControl("#ram-col-controls", {
onStart: () => renderRamGraph.start(),
onPause: () => renderRamGraph.pause(),
onStop: () => renderRamGraph.reset(),
onRestart: () => renderRamGraph.restart()
}, invalidation)Stockage Colonnaire
Data Science
Data & IA
Comprendre le formatage mémoire par colonne (Apache Arrow, Parquet) pour accélérer les requêtes analytiques sur gros volumes.
Quand un jeu de données grandit, la question n’est plus seulement : quelles valeurs contient-il ? Elle devient aussi : dans quel ordre ces valeurs sont-elles rangées en mémoire ?
Deux organisations dominent :
- le stockage en lignes, pratique pour manipuler des enregistrements complets ;
- le stockage en colonnes, très efficace pour analyser une variable à la fois.
Pourquoi l’ordre en mémoire compte
Un tableau de données ressemble à une grille : des lignes, des colonnes, des valeurs. Mais la mémoire d’un ordinateur, elle, est une longue suite d’adresses.
Pour ranger cette grille, il faut donc choisir un ordre.
Par lignes
Les valeurs d’un même individu sont rangées côte à côte.
| Adresse | Valeur |
|---|---|
0x00 |
âge ligne 1 |
0x08 |
salaire ligne 1 |
0x10 |
âge ligne 2 |
0x18 |
salaire ligne 2 |
Cette forme est naturelle quand on ajoute, modifie ou lit une fiche complète.
Par colonnes
Les valeurs d’une même variable sont rangées côte à côte.
| Adresse | Valeur |
|---|---|
0x00 |
âge ligne 1 |
0x08 |
âge ligne 2 |
0x10 |
salaire ligne 1 |
0x18 |
salaire ligne 2 |
Cette forme est redoutable quand on calcule sur une seule colonne.
Lire une colonne
En data science, on demande souvent :
- la moyenne d’une colonne ;
- le minimum ou le maximum d’une variable ;
- un filtre sur une colonne ;
- une transformation appliquée à toutes les valeurs d’un même attribut.
Dans ces cas, le stockage colonnaire évite de traverser des valeurs inutiles.
Le lien avec le cache processeur
Le processeur ne lit pas la mémoire valeur par valeur de façon isolée. Il charge des petits blocs de mémoire dans ses caches.
Si les valeurs utiles sont proches les unes des autres, le processeur peut enchaîner les lectures rapidement. Si elles sont séparées par d’autres colonnes, il doit charger davantage de blocs inutiles.
C’est l’idée derrière les cache hits et cache misses montrés dans le simulateur.
Simulateur RAM
Ligne ou colonne ?
Choisissez un mode de stockage, puis observez le trajet du processeur pour lire toute la colonne Salaire.
Chaque ligne est rangée d’un bloc : Age, puis Salaire, puis la ligne suivante.
Ce format est confortable pour retrouver une fiche complète, mais moins efficace pour analyser uniquement les salaires.
Toutes les valeurs de Age sont regroupées, puis toutes les valeurs de Salaire.
Ce format accélère les calculs analytiques : la colonne demandée forme une zone mémoire continue.
| Age | Salaire |
|---|---|
| 25 | 50k |
| 30 | 60k |
| 28 | 55k |
À retenir
Le stockage colonnaire ne change pas les données. Il change leur organisation physique pour rendre certains traitements beaucoup plus rapides.
| Besoin principal | Format souvent adapté |
|---|---|
| Lire ou écrire une fiche complète | Stockage en lignes |
| Calculer sur une variable complète | Stockage en colonnes |
| Explorer de grands tableaux analytiques | Stockage en colonnes |
Tip
En pratique, des formats comme Parquet ou Apache Arrow exploitent cette idée : ils rangent les colonnes de manière à accélérer les lectures analytiques.