Qu'est-ce qu'une base de données en colonnes?

98

Je travaille avec l'entreposage depuis un moment maintenant.

Je suis intrigué par les bases de données en colonnes et la vitesse qu'elles ont à offrir pour la récupération de données.

J'ai une question en plusieurs parties:

  • Comment fonctionnent les bases de données en colonnes?
  • En quoi diffèrent-ils des bases de données relationnelles?
Raj Plus
la source
1
En plus du nombre réduit de recherches mentionné dans les réponses, certaines implémentations (par exemple le magasin de colonnes du serveur SQL) compresseront les données. Cela empêche le filtrage des lignes mais peut en outre améliorer les performances des requêtes.
Pace

Réponses:

49

Comment fonctionnent les bases de données en colonnes?
La base de données en colonnes est un concept plutôt une architecture / implémentation particulière . En d'autres termes, il n'y a pas une description particulière du fonctionnement de ces bases de données; en effet, plusieurs sont basés sur des SGBD traditionnels, orientés lignes, stockant simplement les informations dans des tables avec une (ou plutôt souvent deux) colonnes (et ajoutant la couche nécessaire pour accéder aux données en colonnes de manière simple).

En quoi diffèrent-ils des bases de données relationnelles? Ils diffèrent généralement des bases de données traditionnelles (orientées lignes) en ce qui concerne ...

  • performance...
  • exigences de stockage ...
  • facilité de modification du schéma ...

... dans des cas d'utilisation spécifiques des SGBD .
En particulier, ils offrent des avantages dans les domaines mentionnés lorsque l'utilisation typique est de calculer des valeurs agrégées sur un nombre limité de colonnes, par opposition à essayer de récupérer toutes / la plupart des colonnes pour une entité donnée.

Existe-t-il une version d'essai d'une base de données en colonnes que je peux installer pour jouer? (Je suis sur Windows 7) Oui, il existe des implémentations commerciales, gratuites et également open-source de bases de données en colonnes. Voir la liste à la fin de l'article Wikipédia pour commencer.
Sachez que plusieurs de ces implémentations ont été introduites pour répondre à un besoin particulier (par exemple, très faible encombrement, distribution de données hautement compressible, ou émulation de matrice de rechange, etc.) plutôt que de fournir un SGBD orienté colonne à usage général en soi.

Remarque: La remarque sur «l'orientation à un seul objectif» de plusieurs SGBD en colonnes n'est pas une critique de ces implémentations, mais plutôt une indication supplémentaire qu'une telle approche pour les SGBD s'écarte de l'approche plus «naturelle» (et certainement plus largement utilisée) pour stocker les entités d'enregistrement. En conséquence, cette approche est utilisée lorsque l'approche axée sur les lignes n'est pas satisfaisante et a donc tendance à
a) être ciblée dans un but particulier b) recevoir moins de ressources / d'intérêt que les travaux sur «Usage général», «Essayé et Testé ", approche tabulaire.

À titre provisoire, le modèle de données Entity-Attribute-Value (EAV) peut être une stratégie de stockage alternative que vous voudrez peut-être envisager. Bien que distinct du modèle de base de données colonne «pur», EAV partage plusieurs des caractéristiques des bases de données colonne.

mjv
la source
253

Comment fonctionnent les bases de données en colonnes? Le concept déterminant d'un magasin de colonnes est que les valeurs d'une table sont stockées de manière contiguë par colonne. Ainsi la table des fournisseurs classique de la base de données fournisseurs et pièces de CJ Date:

SNO  STATUS CITY    SNAME
---  ------ ----    -----
S1       20 London  Smith
S2       10 Paris   Jones
S3       30 Paris   Blake
S4       20 London  Clark
S5       30 Athens  Adams

serait stocké sur disque ou en mémoire quelque chose comme:

S1S2S3S4S5;2010302030;LondonParisParisLondonAthens;SmithJonesBlakeClarkAdams 

Ceci est en contraste avec un rowstore traditionnel qui stockerait les données plus comme ceci:

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams

De ce concept simple découle toutes les différences fondamentales de performances, pour le meilleur ou pour le pire, entre un magasin de colonnes et un magasin de lignes. Par exemple, un magasin de colonnes excellera dans les agrégations telles que les totaux et les moyennes, mais l'insertion d'une seule ligne peut être coûteuse, tandis que l'inverse est vrai pour les magasins de lignes. Cela devrait être apparent à partir du diagramme ci-dessus.

En quoi diffèrent-ils des bases de données relationnelles? Une base de données de relations est un concept logique. Une base de données en colonnes, ou magasin de colonnes, est un concept physique. Ainsi, les deux termes ne sont pas comparables de manière significative. Les DMBS orientés colonnes peuvent être relationnels ou non, tout comme les SGBD orientés lignes peuvent adhérer plus ou moins aux principes relationnels.

Paul Mansour
la source
22
Cela semble mieux que la réponse acceptée, mais je ne suis pas un expert. Vote positif.
Rob Grant
2
Les bases de données orientées colonnes sont utilisées lorsque les agrégations sur des colonnes spécifiques sont interrogées comme le rapport de vente. Le point ici est que si vous utilisez une base de données orientée ligne, toutes les lignes (blocs) doivent être amenées dans la mémoire principale, ce qui inclut beaucoup de temps de recherche à partir du disque pour amener tous les blocs du disque à la RAM, même si vous n'êtes intéressé que par la colonne qui vous aide à fournir un rapport de vente. Alors que dans le schéma orienté colonne, les colonnes sont stockées de manière contiguë dans les blocs, ce qui rend les recherches moindres en raison du nombre inférieur de blocs. Ainsi, les bases de données de colonnes sont utilisées pour OLAP, tandis que les bases de données orientées lignes sont utilisées pour les éléments OLTP.
bharatj
4

Je dirais que le meilleur candidat pour comprendre les bases de données orientées colonnes est de vérifier HBase ( Apache Hbase ). Vous pouvez vérifier le code et explorer plus avant pour en savoir plus sur l'implémentation.

hari_sree
la source
2

En outre, les bases de données en colonnes ont une affinité intégrée pour la compression des données et le processus de chargement est unique. Voici un article que j'ai écrit en 2008 qui en explique un peu plus.

Vous pourriez également être intéressé par un nouveau rapport de Carl Olofson d'IDC sur la technologie SGBD de 3e génération. Il discute colonnaire, et al. Si vous n'êtes pas un client IDC, vous pouvez l'obtenir gratuitement sur notre site. Il fait également un webinaire le 16 juin (également sur notre site).

(BTW, un commentaire ci-dessus répertorie les astérisques mais je ne pense pas qu'ils soient en colonnes.)

kim stanick
la source
Vous pouvez obtenir le rapport IDC sur: paraccel.com/press/3rd_generation_database_technology
kim stanick
Aster Data est une base de données relationnelle MPP et prend en charge nativement les tables en colonnes.
topchef
@kimstanick, l'URL de paraccel est morte.
user674669
2

Pour comprendre ce qu'est une base de données orientée colonne, il est préférable de la comparer avec une base de données orientée ligne.

Les bases de données orientées lignes (par exemple, MS SQL Server et SQLite) sont conçues pour renvoyer efficacement des données pour une ligne entière. Il le fait en stockant toutes les valeurs de colonnes d'une ligne ensemble. Les bases de données orientées lignes sont bien adaptées aux systèmes OLTP (par exemple, les ventes au détail et les systèmes de transactions financières).

Les bases de données orientées colonnes sont conçues pour renvoyer efficacement des données pour un nombre limité de colonnes. Il le fait en stockant toutes les valeurs d'une colonne ensemble. Deux bases de données orientées colonnes largement utilisées sont Apache Hbase et Google BigTable (utilisé par Google pour ses recherches, ses analyses, ses cartes et Gmail). Ils conviennent aux projets Big Data. Une base de données orientée colonne excellera dans les opérations de lecture sur un nombre limité de colonnes, cependant l'opération d'écriture sera coûteuse par rapport aux bases de données orientées ligne.

Pour en savoir plus: https://en.wikipedia.org/wiki/Column-oriented_DBMS

Razan Paul
la source
1

Information produit. Cela peut aider. Il s'agissait de produits présentés sur une recherche Google.

http://www.vertica.com/

http://www.paraccel.com/

http://www.asterdata.com/index.php

S.Lott
la source
Une chose à noter à propos de Vertica est que j'ai vu une référence sur le Web selon laquelle le coût de la licence est de 150 000 $ / To de données stockées. donc ce n'est pas bon marché.
Mark
@Mark: Le coût n'est pas le problème. L’information est le problème. Si le PO veut des informations, les fournisseurs sont souvent la meilleure source possible.
S.Lott
1
Amazon propose son stockage de données RedShift ultra rapide à moins de 1000 dollars par téraoctet et par an si vous ne recherchez pas particulièrement Columnar one.
mevdiven
1

kx est une autre base de données en colonnes, par exemple utilisée dans le secteur financier. La licence coûte quelque peu 50 000 $ la dernière fois que j'ai vérifié. Aucune optimisation nécessaire, aucun index nécessaire, parce que les opérateurs puissants kx a (équivalents Matlab: .*, kron, bsxfun, ...).

user2987828
la source