Cos'è un database colonnare?


98

Sto lavorando con il magazzino da un po 'di tempo ormai.

Sono incuriosito dai database a colonne e dalla velocità che hanno da offrire per il recupero dei dati.

Ho una domanda in più parti:

  • Come funzionano i database a colonne?
  • In cosa differiscono dai database relazionali?

1
Oltre al numero ridotto di ricerche menzionato nelle risposte, alcune implementazioni (ad esempio, l'archivio delle colonne del server SQL) comprimeranno i dati. Ciò impedisce il filtraggio delle righe ma può inoltre migliorare le prestazioni delle query.
Pace

Risposte:


49

Come funzionano i database a colonne?
Il database a colonne è un concetto piuttosto una particolare architettura / implementazione . In altre parole, non esiste una descrizione particolare su come funzionano questi database; in effetti, molti sono basati su DBMS tradizionali, orientati alle righe, memorizzando semplicemente le informazioni in tabelle con una (o piuttosto spesso due) colonne (e aggiungendo il livello necessario per accedere ai dati colonnari in modo semplice).

In cosa differiscono dai database relazionali? In genere differiscono dai database tradizionali (orientati alle righe) per quanto riguarda ...

  • prestazione...
  • requisiti di archiviazione ...
  • facilità di modifica dello schema ...

... in casi d'uso specifici dei DBMS .
In particolare offrono vantaggi nelle aree menzionate quando l'uso tipico è calcolare valori aggregati su un numero limitato di colonne, invece di cercare di recuperare tutte / la maggior parte delle colonne per una data entità.

Esiste una versione di prova di un database a colonne che posso installare per giocare? (Sono su Windows 7) Sì, esistono implementazioni commerciali, gratuite e anche open source di database a colonne. Consulta l'elenco alla fine dell'articolo di Wikipedia per iniziare.
Attenzione che molte di queste implementazioni sono state introdotte per soddisfare una particolare esigenza (ad esempio un ingombro molto ridotto, una distribuzione di dati altamente comprimibile o un'emulazione di matrice di riserva, ecc.) Piuttosto che fornire un DBMS orientato alla colonna per uso generale di per sé.

Nota: l'osservazione sull '"orientamento a un solo scopo" di diversi DBMS colonnari non è una critica di queste implementazioni, ma piuttosto un'indicazione aggiuntiva che un tale approccio per i DBMS si discosta dall'approccio più "naturale" (e certamente più ampiamente utilizzato) per archiviare entità record. Di conseguenza, questo approccio viene utilizzato quando l'approccio orientato alle righe non è soddisfacente, e quindi e tende a
a) essere mirato per uno scopo particolare b) ricevere meno risorse / interesse rispetto al lavoro su "Scopo generale", "Provato e Testato ", approccio tabellare.

A titolo indicativo, il modello di dati Entity-Attribute-Value (EAV) potrebbe essere una strategia di archiviazione alternativa che potresti prendere in considerazione. Sebbene distinto dal modello "puro" di DB a colonne, EAV condivide molte delle caratteristiche dei DB a colonne.


253

Come funzionano i database a colonne? Il concetto di definizione di un archivio di colonne è che i valori di una tabella vengono memorizzati in modo contiguo per colonna. Quindi la classica tabella dei fornitori dal database dei fornitori e delle parti di 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

sarebbe archiviato su disco o in memoria qualcosa di simile:

S1S2S3S4S5;2010302030;LondonParisParisLondonAthens;SmithJonesBlakeClarkAdams 

Questo è in contrasto con un rowstore tradizionale che memorizzerebbe i dati in questo modo:

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams

Da questo semplice concetto derivano tutte le differenze fondamentali nelle prestazioni, nel bene e nel male, tra un archivio di colonne e un archivio di righe. Ad esempio, un archivio di colonne eccellerà nel fare aggregazioni come totali e medie, ma l'inserimento di una singola riga può essere costoso, mentre l'inverso vale per gli archivi di riga. Questo dovrebbe essere evidente dal diagramma sopra.

In cosa differiscono dai database relazionali? Un database di relazioni è un concetto logico. Un database a colonne, o archivio di colonne, è un concetto fisico. Quindi i due termini non sono comparabili in alcun modo significativo. I DMBS orientati alle colonne possono essere relazionali o meno, proprio come i DBMS orientati alle righe possono aderire più o meno ai principi relazionali.


22
Sembra migliore della risposta accettata, ma non sono un esperto. Voto positivo.
Rob Grant,

2
I database orientati alle colonne vengono utilizzati quando le aggregazioni su colonne specifiche vengono interrogate come report di vendita. Il punto qui è che se usi un database orientato alle righe, tutte le righe (blocchi) devono essere portate nella memoria principale, il che include molto tempo di ricerca dal disco per portare tutto il blocco dal disco alla ram, anche se sei interessato solo alla colonna che ti aiuta a fornire report sulle vendite. Mentre nello schema orientato alle colonne le colonne vengono memorizzate contigue nei blocchi, il che rende le ricerche minori a causa del minor numero di blocchi. Quindi i database a colonne vengono utilizzati per OLAP, mentre quelli orientati alle righe vengono utilizzati per le cose OLTP.
bharatj

4

Direi che il miglior candidato per comprendere i database orientati alle colonne è controllare HBase ( Apache Hbase ). Puoi controllare il codice ed esplorare ulteriormente per scoprire l'implementazione.


2

Inoltre, i DB a colonne hanno un'affinità incorporata per la compressione dei dati e il processo di caricamento è unico. Ecco un articolo che ho scritto nel 2008 che spiega un po 'di più.

Potresti anche essere interessato a un nuovo rapporto di Carl Olofson di IDC sulla tecnologia DBMS di terza generazione. Discute colonnare, et al. Se non sei un cliente IDC puoi scaricarlo gratuitamente sul nostro sito. Sta facendo anche un webinar il 16 giugno (anche sul nostro sito).

(A proposito, un commento sopra elenca gli asterdati ma non penso che siano a colonne.)


È possibile ottenere il rapporto IDC su: paraccel.com/press/3rd_generation_database_technology
kim stanick

Aster Data è un database relazionale MPP e ha il supporto nativo per le tabelle colonnari.
topchef

@kimstanick, l'URL paraccel è morto.
user674669

2

Per capire cos'è un database orientato alle colonne, è meglio confrontarlo con un database orientato alle righe.

I database orientati alla riga (ad esempio MS SQL Server e SQLite) sono progettati per restituire in modo efficiente i dati per un'intera riga. Lo fa memorizzando tutti i valori delle colonne di una riga insieme. I database orientati alle righe sono adatti per i sistemi OLTP (ad esempio, vendite al dettaglio e sistemi di transazioni finanziarie).

I database orientati alle colonne sono progettati per restituire in modo efficiente i dati per un numero limitato di colonne. Lo fa memorizzando tutti i valori di una colonna insieme. Due database orientati a colonne ampiamente utilizzati sono Apache Hbase e Google BigTable (utilizzati da Google per la sua ricerca, analisi, mappe e Gmail). Sono adatti per i progetti di big data. Un database orientato alle colonne eccellerà nelle operazioni di lettura su un numero limitato di colonne, tuttavia l'operazione di scrittura sarà costosa rispetto ai database orientati alle righe.

Per ulteriori informazioni: https://en.wikipedia.org/wiki/Column-oriented_DBMS


1

Informazioni sul prodotto. Questo può aiutare. Questi dovevano presentare i prodotti su una ricerca su Google.

http://www.vertica.com/

http://www.paraccel.com/

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


Una cosa da notare su Vertica è che ho visto un riferimento sul web al costo della licenza essendo $ 150.000 / TB di dati archiviati. quindi non è economico.
Marco

@Mark: il problema non è il costo. L'informazione è il problema. Se l'OP vuole informazioni, i fornitori sono spesso la migliore fonte possibile.
S.Lott

1
Amazon offre l'archiviazione dei dati RedShift super veloce a meno di $ 1.000 per terabyte all'anno se non stai cercando particolarmente uno a colonne.
mevdiven

1

kx è un altro database a colonne, utilizzato ad esempio nel settore finanziario. La licenza è un po '$ 50K l'ultima volta che ho controllato, però. Nessuna ottimizzazione necessario, nessun indice aveva bisogno, perché kx ha operatori potenti (equivalenti MATLAB: .*, kron, bsxfun, ...).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.