Compréhension détaillée du stockage des colonnes et du stockage des lignes


Dingdu! Voici la compilation des supports de cours d'étude de Xiao Ah Woo. Un bon souvenir n'est pas aussi bon qu'un mauvais stylo, c'est aussi une journée pour progresser. Avançons ensemble!
Insérez la description de l'image ici

One, stockage de colonnes et stockage de lignes

列式存储是指一列中的数据在存储介质中是连续存储的;

行式存储是指一行中的数据在存储介质中是连续存储的。

En termes simples, vous pouvez penser à une base de données en colonnes car chaque colonne est une table. Cette table ne comporte qu'une seule colonne. Si vous n'effectuez qu'une requête conditionnelle sur cette colonne, la vitesse est très rapide.

Alors, quels sont les différents effets de ces deux méthodes de stockage différentes sur le CRUD des données ?

Lecture de quelques articles, en général sur les deux points suivants:

1。行数据库适用于读取出少行,多列的情况;
   列数据库相反,适用于读取出少数列,多数行的情况。

2。列数据库可以节省空间,如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值。

Deuxièmement, une meilleure compréhension du stockage des colonnes et du stockage des lignes

Traditionnellement, 行式数据库les lignes de données complètes sont stockées dans des pages de données. De cette manière, les problèmes suivants se produiront lors de l'interrogation de grandes quantités de données:

1、在没有索引的情况下,会把一行全部查出来,查询会使用大量IO
2、虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间

Mais si la plupart des colonnes de données sont nécessaires pour traiter la requête, cette méthode est plus efficace sur les E / S disque.
D'une manière générale, OLTP(Online Transaction Processing,联机事务处理)cette méthode convient aux applications.

Une requête de type OLAP peut avoir besoin d'accéder à des millions, voire des milliards de lignes de données, et la requête ne se soucie généralement que de quelques colonnes de données. Par exemple, pour interroger les 20 premiers produits avec les ventes les plus élevées cette année, cette requête ne concerne que trois colonnes de données: heure (date), produit (article) et montant des ventes (montant des ventes). Les autres colonnes de données du produit, telles que l'URL du produit, la description du produit, le magasin auquel appartient le produit, etc., n'ont aucun sens pour cette requête.

La base de données en colonnes stocke les valeurs de la même colonne de données ensemble. Lors de l'insertion d'une ligne de données, la valeur de chaque colonne de données de la ligne sera également stockée à différents endroits. Par exemple, dans l'exemple ci-dessus, la base de données en colonnes n'a besoin que de lire les colonnes de données stockant «temps, produit, ventes», tandis que la base de données de lignes doit lire toutes les colonnes de données. Par conséquent,列式数据库大大地提高了OLAP大数据量查询的效率 . Bien entendu, une base de données en colonnes n'est pas une panacée. Chaque fois que vous lisez une ligne de données, vous devez lire les valeurs de chaque colonne de données à différents endroits, puis les fusionner pour former une ligne de données . Par conséquent,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用 .

De nombreuses bases de données en colonnes prennent également en charge le 列组(column group,Bigtable系统中称为locality group)stockage ensemble des valeurs de plusieurs colonnes de données fréquemment consultées ensemble. Si les colonnes de données lues appartiennent au même groupe de colonnes, la base de données en colonnes peut lire les valeurs de plusieurs colonnes de données à la fois à partir du même endroit, évitant ainsi la fusion de plusieurs colonnes de données . Le groupe de colonnes est un mode de stockage mixte de lignes et de colonnes, qui peut répondre aux exigences de requête d'OLTP et d'OLAP en même temps.

En raison du degré élevé de duplication des données dans la même colonne de données, la compression de base de données en colonnes présente de grands avantages. Par exemple, la base de données en colonnes Google Bigtable peut atteindre un taux de compression de plus de 15 fois pour la compression de la bibliothèque de pages Web . De plus, une optimisation d'index spéciale peut être effectuée pour le stockage en colonnes. Par exemple, la colonne "sexe" n'a que deux valeurs, "homme" et "femme". Vous pouvez créer un index bitmap pour cette colonne:
Insérez la description de l'image ici

Comme le montre la figure ci-dessus, le bitmap correspondant à "male" est 100101, indiquant que la valeur des lignes 1, 4 et 6 est "male"; le bitmap correspondant à "female" est 011010, indiquant que la valeur des lignes 2, 3 et 5 est " Femme". 如果需要查找男性或者女性的个数,只需要统计相应的位图中1出现的次数即可。De plus, une fois l'index bitmap établi, la répétition de 0 et 1 est élevée et une méthode de codage spéciale peut être utilisée pour le compresser.

Trois avantages de stockage en colonne

Le stockage basé sur le mode colonne présente naturellement les avantages suivants:

  1. Index automatique

Parce qu'elle est basée sur le stockage de colonnes, chaque colonne elle-même équivaut à un index. Ainsi, lors de certaines opérations nécessitant des index, aucune structure de données supplémentaire n'est nécessaire pour créer un index approprié pour cette colonne.

  1. Propice à la compression des données

Il y a deux raisons à la compression.

Tout d'abord, vous constaterez que la plupart de la cardinalité des données de la colonne est en fait répétée. Par exemple, comme le même auteur publiera plusieurs blogs, la cardinalité de toutes les valeurs apparaissant dans la colonne auteur doit être inférieure au nombre de blogs, de sorte que le stockage dans la colonne auteur En fait, il n'est pas nécessaire de stocker une telle quantité de données que le nombre de blogs;

Deuxièmement, le même type de données de colonne est cohérent, ce qui est bénéfique pour l'optimisation et la compression du remplissage de la structure de données, et des algorithmes plus avantageux peuvent être adoptés pour compresser et stocker le type de données de la colonne numérique.

Quatre, résumé

列式存储: 每一列单独存放,数据即是索引。
          只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。
          一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。

行式存储: 把一行数据作为一个整体来存储。

Quand dois-je utiliser le stockage en ligne? Quand dois-je utiliser le stockage en colonne?

en parlant simplement:

Si vous vous concentrez la plupart du temps sur le contenu de la table entière, plutôt que sur quelques colonnes uniquement, et que le contenu qui vous intéresse ne nécessite aucune opération d'agrégation, il est recommandé 行式存储.

列式存储Si vous êtes plus préoccupé par le contenu de quelques colonnes ou par la nécessité d'une agrégation fréquente, utilisez le tableau pour l'analyse des données après l'agrégation.

Scénarios d'application de stockage en colonne

基于一列或比较少的列计算的时候
经常关注一张表某几列而非整表数据的时候
数据表拥有非常多的列的时候
数据表有非常多行数据并且需要聚集运算的时候
数据表列里有非常多的重复数据,有利于高度压缩

Scénarios d'application de stockage en ligne

关注整张表内容,或者需要经常更新数据
需要经常读取整行数据
不需要聚集运算,或者快速查询需求
数据表本身数据行并不多
数据表的列本身有太多唯一性的数据

Fin!
D'autres dossiers d'apprentissage des connaissances de cours viendront plus tard!

就酱,嘎啦!

Insérez la description de l'image ici

Remarque:
1. La vie est diligente, rien n'est gagné.
2. Qu'est-ce que le stockage en colonne? Consultez l'article pendant quelques secondes pour comprendre:
https://zhuanlan.zhihu.com/p/127823207

Je suppose que tu aimes

Origine blog.csdn.net/qq_43543789/article/details/108662140
conseillé
Classement