DBAtlas · Atlas de operaciones de bases de datos

Almacenamiento columnar / analítica

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;

Oracle Database In-Memory (12.1.0.2+) acelera las consultas analíticas manteniendo las tablas en memoria en formato columnar (In-Memory Column Store, IM) y conservando el formato de filas en disco (formato dual). INMEMORY es una opción con licencia aparte. El parámetro inmemory_size dimensiona el á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.

PostgreSQL básico solo ofrece almacenamiento por filas (heap). Para almacenamiento columnar se usan el access method 'columnar' de Citus (USING columnar), Hydra o la antigua extensión cstore_fdw; proporcionan compresión y velocidad de recorrido para cargas de analítica/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.

MySQL estándar (InnoDB) es por filas y no tiene un columnstore integrado. Para acelerar la analítica se usa MySQL HeatWave (un acelerador columnar en memoria en Oracle Cloud); las soluciones on-premises suelen usar motores columnares externos como ClickHouse o 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);

Los índices columnstore de SQL Server (nonclustered de solo lectura en 2012; clustered actualizables en 2014; nonclustered actualizables en 2016) almacenan los datos por columnas con alta compresión; con batch mode aceleran mucho las consultas analíticas con mucha agregación/recorrido. Clustered es adecuado para data warehouses y 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.

MongoDB almacena los documentos como BSON orientado a filas; no hay almacenamiento columnar (columnstore) integrado. Para cargas analíticas se usan Analytics Nodes dedicados en un replica set de Atlas, Atlas Data Federation o la exportación de datos a un sistema columnar (p. ej., Parquet).

Redis

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

Redis es un almacén clave-valor en memoria; no existe la distinción entre almacenamiento por filas o columnas. Las agregaciones analíticas se hacen con estructuras especiales como Sorted Set, HyperLogLog (recuento aproximado) o RedisTimeSeries; no es adecuado para OLAP a gran 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 ordenaciones y agregaciones, Elasticsearch mantiene los campos en una estructura columnar en disco llamada doc_values (habilitada por defecto en campos numeric/keyword/date). Esta disposición columnar acelera las consultas analíticas/de agregación; está deshabilitada por defecto en los campos text.

Abrir en DBAtlas →