O que é um banco de dados colunar?

98

Já faz um tempo que trabalho com armazenamento.

Estou intrigado com os Bancos de Dados Colunares e a velocidade que eles oferecem para recuperação de dados.

Tenho várias perguntas:

  • Como funcionam os bancos de dados colunares?
  • Como eles diferem dos bancos de dados relacionais?
Raj More
fonte
1
Além do número reduzido de buscas mencionado nas respostas, algumas implementações (por exemplo, armazenamento de coluna do servidor SQL) irão compactar os dados. Isso evita a filtragem de linha, mas também pode melhorar o desempenho da consulta.
Ritmo de

Respostas:

49

Como funcionam os bancos de dados colunares?
Banco de dados colunar é um conceito, em vez de uma arquitetura / implementação particular. Em outras palavras, não existe uma descrição particular de como esses bancos de dados funcionam; na verdade, vários são construídos sobre o SGBD tradicional, orientado por linha, simplesmente armazenando as informações em tabelas com uma (ou melhor, duas) colunas (e adicionando a camada necessária para acessar os dados colunares de maneira fácil).

Como eles diferem dos bancos de dados relacionais? Eles geralmente diferem dos bancos de dados tradicionais (orientados a linhas) no que diz respeito a ...

  • desempenho...
  • requisitos de armazenamento ...
  • facilidade de modificação do esquema ...

... em casos de uso específicos de DBMSes .
Em particular, eles oferecem vantagens nas áreas mencionadas quando o uso típico é calcular valores agregados em um número limitado de colunas, em oposição a tentar recuperar todas / a maioria das colunas de uma determinada entidade.

Existe uma versão de teste de um banco de dados colunar que eu possa instalar para brincar? (Estou no Windows 7) Sim, existem implementações comerciais, gratuitas e também de código aberto de bancos de dados colunares. Veja a lista no final do artigo da Wikipedia para iniciantes.
Esteja ciente de que várias dessas implementações foram introduzidas para atender a uma necessidade específica (digamos, pegada muito pequena, distribuição de dados altamente compactável ou emulação de matriz sobressalente, etc.) em vez de fornecer um DBMS orientado a coluna de propósito geral per-se.

Nota: A observação sobre a "orientação de propósito único" de vários SGBDs colunares não é uma crítica dessas implementações, mas sim uma indicação adicional de que tal abordagem para SGBDs se desvia da abordagem mais "natural" (e certamente mais amplamente usada) para armazenar entidades de registro. Como resultado, esta abordagem é usada quando a abordagem orientada por linha não é satisfatória e, portanto, tende a
a) ser direcionada para um propósito específico b) receber menos recursos / interesse do que o trabalho em "Propósito Geral", "Testado e Testado ", abordagem tabular.

Tentativamente, o modelo de dados Entity-Attribute-Value (EAV) pode ser uma estratégia de armazenamento alternativa que você pode querer considerar. Embora distinto do modelo de banco de dados colunar "puro", o EAV compartilha várias das características dos bancos de dados colunares.

mjv
fonte
253

Como funcionam os bancos de dados colunares? O conceito de definição de um armazenamento de coluna é que os valores de uma tabela são armazenados contiguamente por coluna. Assim, a tabela de fornecedores clássica do banco de dados de fornecedores e peças 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

seria armazenado no disco ou na memória algo como:

S1S2S3S4S5;2010302030;LondonParisParisLondonAthens;SmithJonesBlakeClarkAdams 

Isso está em contraste com um rowstore tradicional, que armazenaria os dados mais como este:

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams

Deste conceito simples fluem todas as diferenças fundamentais no desempenho, para melhor ou pior, entre um armazenamento de coluna e um armazenamento de linha. Por exemplo, um armazenamento de coluna será excelente em fazer agregações como totais e médias, mas inserir uma única linha pode ser caro, enquanto o inverso é verdadeiro para armazenamentos de linha. Isso deve ser aparente no diagrama acima.

Como eles diferem dos bancos de dados relacionais? Um banco de dados de relacionamento é um conceito lógico. Um banco de dados colunar, ou armazenamento de coluna, é um conceito físico. Assim, os dois termos não são comparáveis ​​de nenhuma maneira significativa. DMBSs orientados a coluna podem ser relacionais ou não, assim como os SGBDs orientados a linhas podem aderir mais ou menos aos princípios relacionais.

Paul Mansour
fonte
22
Parece melhor do que a resposta aceita, mas não sou especialista. Voto positivo.
Rob Grant
2
Bancos de dados orientados a colunas são usados ​​onde agregações em colunas específicas são consultadas como relatório de vendas. O ponto aqui é que se você usar um banco de dados orientado a linhas, então todas as linhas (blocos) precisam ser trazidos para a memória principal, o que inclui muito tempo de busca do disco para trazer todos os blocos do disco para a ram, mesmo se você estiver interessado apenas na coluna o que ajuda você a fornecer relatório de vendas. Já no esquema orientado por coluna, as colunas são armazenadas de forma contígua nos blocos, o que torna menos buscas devido ao menor número de blocos. Portanto, os bancos de dados de colunas são usados ​​para OLAP, enquanto os orientados a linhas são usados ​​para coisas OLTP.
bharatj
4

Eu diria que o melhor candidato para entender sobre bancos de dados orientados a colunas é verificar o HBase ( Apache Hbase ). Você pode verificar o código e explorar mais para descobrir sobre a implementação.

hari_sree
fonte
2

Além disso, os bancos de dados colunares têm uma afinidade interna para compactação de dados e o processo de carregamento é único. Aqui está um artigo que escrevi em 2008 que explica um pouco mais.

Você também pode estar interessado em um novo relatório de Carl Olofson da IDC sobre a tecnologia DBMS de 3ª geração. Ele discute colunar, et al. Se você não é um cliente IDC, pode obtê-lo gratuitamente em nosso site. Ele fará um webinar em 16 de junho também (também em nosso site).

(Aliás, um comentário acima lista asterdados, mas não acho que sejam colunares.)

kim stanick
fonte
Você pode obter o relatório IDC em: paraccel.com/press/3rd_generation_database_technology
kim stanick
O Aster Data é um banco de dados relacional MPP e tem suporte nativo para tabelas colunares.
topchef de
@kimstanick, o URL do paraccel está morto.
user674669
2

Para entender o que é banco de dados orientado a colunas, é melhor contrastá-lo com o banco de dados orientado a linhas.

Bancos de dados orientados a linhas (por exemplo, MS SQL Server e SQLite) são projetados para retornar dados de maneira eficiente para uma linha inteira. Isso é feito armazenando todos os valores das colunas de uma linha juntos. Os bancos de dados orientados a linhas são adequados para sistemas OLTP (por exemplo, vendas no varejo e sistemas de transações financeiras).

Os bancos de dados orientados a colunas são projetados para retornar dados de maneira eficiente para um número limitado de colunas. Isso é feito armazenando todos os valores de uma coluna juntos. Dois bancos de dados orientados a colunas amplamente usados ​​são Apache Hbase e Google BigTable (usado pelo Google para Search, Analytics, Maps e Gmail). Eles são adequados para os projetos de big data. Um banco de dados orientado a colunas se sobressairá em operações de leitura em um número limitado de colunas; no entanto, a operação de gravação será cara em comparação com bancos de dados orientados a linhas.

Para mais informações: https://en.wikipedia.org/wiki/Column-oriented_DBMS

Razan Paul
fonte
1

Informação do produto. Isso pode ajudar. Tratava-se de produtos apresentados em uma pesquisa do Google.

http://www.vertica.com/

http://www.paraccel.com/

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

S.Lott
fonte
Uma coisa a ser observada sobre o Vertica é que eu vi uma referência na web ao custo da licença sendo $ 150k / TB de dados armazenados. então não é barato.
Marcos
@Mark: O custo não é o problema. A informação é o problema. Se o OP deseja informações, os fornecedores costumam ser a melhor fonte possível.
S.Lott
1
A Amazon oferece seu armazenamento de dados RedShift super rápido abaixo de US $ 1.000 por terabyte por ano, se você não estiver procurando particularmente por um Colunar.
dia
1

kx é outro banco de dados colunar, por exemplo usado no setor financeiro. A licença é algo em torno de $ 50K da última vez que verifiquei, no entanto. Sem otimização necessária, nenhum índice necessário, porque kx tem operadores poderosos (equivalentes Matlab: .*, kron, bsxfun, ...).

user2987828
fonte