DBAtlas · Atlas de operações de banco de dados

Armazenamento colunar / analytics

Oracle

-- Database In-Memory: keep the table in memory in columnar format
ALTER TABLE sale INMEMORY;
-- With priority and compression:
ALTER TABLE sale INMEMORY PRIORITY HIGH
  MEMCOMPRESS FOR QUERY HIGH;

O Oracle Database In-Memory (12.1.0.2+) acelera consultas analíticas mantendo as tabelas em memória em formato colunar (In-Memory Column Store, IM), preservando o formato de linha em disco (dual format). INMEMORY é uma opção licenciada separadamente. O parâmetro inmemory_size dimensiona a área IM.

PostgreSQL

-- Core PostgreSQL is row-based; columnar storage needs an extension:
-- Citus columnar access method:
CREATE EXTENSION IF NOT EXISTS citus;
CREATE TABLE sale_columnar (...) USING columnar;
-- Alternatives: the Hydra/cstore_fdw extensions.

O PostgreSQL core oferece apenas armazenamento baseado em linhas (heap). Para armazenamento colunar, usam-se o access method 'columnar' do Citus (USING columnar), o Hydra ou a antiga extensão cstore_fdw; elas fornecem compressão e velocidade de varredura para cargas de analytics/data warehouse.

MySQL

-- Not applicable: core InnoDB does not offer columnar storage.
-- For analytics: MySQL HeatWave (cloud, in-memory columnar)
-- or integration with external ClickHouse/Apache Doris.

O MySQL padrão (InnoDB) é baseado em linhas e não tem columnstore nativo. Para aceleração analítica, usa-se o MySQL HeatWave (um acelerador colunar em memória na Oracle Cloud); soluções on-premises normalmente usam engines colunares externos como ClickHouse ou Apache Doris.

SQL Server

-- Clustered columnstore index (for analytic tables):
CREATE CLUSTERED COLUMNSTORE INDEX cci_sale ON dbo.sale;
-- Nonclustered columnstore on a rowstore table (HTAP):
CREATE NONCLUSTERED COLUMNSTORE INDEX ncci_sale
  ON dbo.sale (city, product, amount, created_at);

Os columnstore indexes do SQL Server (nonclustered somente leitura no 2012; clustered atualizável no 2014; nonclustered atualizável no 2016) armazenam os dados por coluna com alta compressão; com batch mode, aceleram bastante consultas analíticas com muita agregação/varredura. O clustered é adequado para data warehouses; o nonclustered, para HTAP.

MongoDB

-- Not applicable: MongoDB is document (row-like) based.
-- For analytics: dedicated Analytics Nodes in Atlas
-- or export to a columnar format ($out)/an external engine.

O MongoDB armazena documentos como BSON, semelhante a linhas; não há armazenamento colunar (columnstore) nativo. Para cargas analíticas, usam-se Analytics Nodes dedicados em um replica set do Atlas, o Atlas Data Federation ou a exportação dos dados para um sistema colunar (ex.: Parquet).

Redis

-- Not applicable: there is no concept of columnar storage.

O Redis é um armazenamento chave-valor em memória; não há distinção entre armazenamento por linha/coluna. Agregações analíticas são feitas com estruturas especiais como Sorted Set, HyperLogLog (contagem aproximada) ou RedisTimeSeries; não é adequado para OLAP em larga escala.

Elasticsearch

# doc_values: fields are stored column-wise on disk (enabled by default).
# Required for sorting/aggregation; active on non-text fields.
PUT sale
{ "mappings": { "properties":
  { "amount": { "type": "double", "doc_values": true } } } }

Para ordenações e agregações, o Elasticsearch mantém os campos em uma estrutura colunar em disco chamada doc_values (habilitada por padrão em campos numeric/keyword/date). Esse layout colunar acelera consultas analíticas/de agregação; é desabilitado por padrão em campos text.

Abrir no DBAtlas →