L'orientation des données est la représentation de données tabulaires dans un modèle de mémoire linéaire, comme sur disque ou en mémoire vive . Les deux représentations les plus courantes sont l'orientation par colonnes (format en colonnes) et l'orientation par lignes (format en lignes).
Le choix de l'orientation des données est un compromis et une décision architecturale dans les bases de données , les moteurs de requêtes et les simulations numériques. De ce fait, les formats orientés lignes sont plus couramment utilisés dans le traitement transactionnel en ligne (OLTP) et les formats orientés colonnes dans le traitement analytique en ligne (OLAP).
Parmi les exemples de formats orientés colonnes, on peut citer Apache ORC , Apache Parquet , Apache Arrow ainsi que les formats utilisés par BigQuery , Amazon Redshift et Snowflake . Les exemples prédominants de formats orientés lignes incluent CSV, les formats utilisés dans la plupart des bases de données relationnelles ( Oracle , MySQL, etc.), le format en mémoire d' Apache Spark et Apache Avro .
Description
Les données tabulaires sont bidimensionnelles : elles sont modélisées en lignes et en colonnes. Cependant, les systèmes informatiques représentent les données selon un modèle de mémoire linéaire , à la fois sur disque et en mémoire vive. Par conséquent, la représentation d’un tableau dans un modèle de mémoire linéaire nécessite la conversion de sa structure bidimensionnelle en un espace unidimensionnel. L’orientation des données dépend du choix effectué lors de cette conversion. Il existe deux principales orientations : l’orientation par lignes et l’orientation par colonnes.
orienté en ligne
Dans une base de données orientée lignes, également appelée base de données en lignes, les éléments de la table
sont stockés linéairement sous forme
Chaque ligne du tableau est disposée l'une après l'autre. Dans cette orientation, les valeurs d'une même ligne sont proches spatialement (par exemple, des adresses similaires dans un espace adressable).
Exemples
- CSV
- Formats sur disque et en mémoire de Postgres
- Format en mémoire d'Apache Spark
- Apache Avro
- MySQL
- ensembles de données SAS
Orienté en colonnes
Dans une base de données orientée colonnes, également appelée base de données en colonnes, les éléments de la table
sont stockés linéairement sous forme
Chaque colonne du tableau est disposée l'une après l'autre. Dans cette configuration, les valeurs d'une même colonne sont proches spatialement (par exemple, des adresses similaires dans un espace adressable).
Exemples
- Formats de stockage et de mémoire de BigQuery
- Parquet Apache
- Apache ORC
- Flèche Apache
- Format en mémoire de DuckDB
- Format en mémoire Pandas
- Dataframes R
Consultez la liste des SGBD orientés colonnes pour plus d'exemples.
Compromis
L'orientation des données est une décision architecturale importante pour les systèmes de traitement des données, car elle entraîne des compromis importants en matière de performances et de stockage . Voici quelques dimensions de ce compromis.
Accès aléatoire
L’approche orientée lignes bénéficie d’un accès aléatoire rapide aux lignes. L’approche orientée colonnes bénéficie d’un accès aléatoire rapide aux colonnes. Dans les deux cas, cela résulte d’une réduction des défauts de page ou de cache lors de l’accès aux données.
Insérer
L'approche par lignes bénéficie d'une insertion rapide d'une nouvelle ligne. L'approche par colonnes bénéficie d'une insertion rapide d'une nouvelle colonne.
Cette dimension est une raison importante pour laquelle les formats orientés lignes sont plus couramment utilisés dans le traitement transactionnel en ligne (OLTP), car ils permettent des transactions plus rapides par rapport aux formats orientés colonnes.
Accès conditionnel
Les données orientées lignes bénéficient d'un accès rapide grâce à un filtre. Les données orientées colonnes bénéficient d'un accès rapide grâce à une projection .
Performances de calcul
L'approche par colonnes tire parti de la rapidité des opérations analytiques. Ceci est dû à la possibilité d'exploiter les instructions SIMD .
Taille non compressée
L'orientation par colonnes présente l'avantage d'une taille non compressée plus petite. Ceci est dû à la possibilité qu'offre cette orientation de représenter certains types de données avec des encodages dédiés.
Par exemple, un tableau de 128 lignes avec une colonne booléenne nécessite 128 octets dans un format orienté lignes (un octet par booléen), mais 128 bits (16 octets) dans un format orienté colonnes (via une image bitmap). Autre exemple : l’utilisation du codage par plage pour encoder une colonne.
Taille compressée
L'organisation en colonnes présente l'avantage d'une taille compressée réduite. Ceci résulte d'une plus grande homogénéité au sein d'une colonne qu'entre plusieurs lignes.
Conversion et échange
Comme les deux orientations représentent les mêmes données, il est possible de convertir un ensemble de données orienté lignes en un ensemble de données orienté colonnes et inversement, moyennant une augmentation de la puissance de calcul. En particulier, les moteurs de requêtes avancés tirent souvent parti des avantages de chaque orientation et effectuent la conversion de l'une à l'autre lors de leur exécution. Par exemple, une requête Apache Spark peut
- Lire les données depuis Apache Parquet (orienté en colonnes)
- Chargez-le au format interne en mémoire de Spark (orienté ligne).
- Convertissez-le en Apache Arrow pour un calcul spécifique (orienté colonnes).
- Écrire dans Apache Avro pour le streaming (orienté ligne)