Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Data Warehouse Service/ Prácticas recomendadas / Desarrollo de datos/ Selección de un tipo de tabla adecuado para impulsar el desarrollo y las consultas
Actualización más reciente 2026-09-29 GMT+08:00

Selección de un tipo de tabla adecuado para impulsar el desarrollo y las consultas

La forma en que se almacenan los datos en una base de datos tiene un impacto significativo en el rendimiento y la eficiencia del procesamiento de datos. Esta sección explica los tipos de tablas que admite DWS, los clasifica por formato de almacenamiento, describe sus usos y ofrece ejemplos básicos para la selección y el desarrollo de tablas.

Formatos de almacenamiento de tablas

En términos de estructura de almacenamiento de datos, DWS admite tablas de almacenamiento por filas y tablas de almacenamiento por columnas.

Las tablas híbridas de almacenamiento por filas y columnas son esencialmente tablas de almacenamiento por columnas.

  • Una tabla de almacenamiento por filas almacena cada fila como su unidad física más pequeña. En este formato, todos los campos de una fila se almacenan de forma contigua, incluidos los marcadores de posición para valores nulos. Para encontrar una fila completa, puede utilizar su identificador de fila único (tid).

    Un ejemplo de almacenamiento físico de datos en una tabla de almacenamiento por filas:

    1
    2
    3
    4
    | ID  | Name  | Age | Salary | Department | 
    |-----|-------|-----|--------|------------|
    | 001 | Jack | 30 | 15000 | Technology Dept | ←Continuous storage of data in a row
    | 002 | John | 28 | 12000 | Marketing Dept |
    
  • Una tabla de almacenamiento por columnas almacena los datos por columnas en lugar de por filas. Los valores de cada columna se almacenan de forma contigua, uno tras otro. Las columnas separadas se gestionan como unidades de almacenamiento distintas.

    Un ejemplo de almacenamiento físico de datos en una tabla de almacenamiento por columnas:

    1
    2
    3
    Column: ID      → | 001 | 002 | 003 |...
    Column: Name → | Jack | John | Tom |...
    Column: Age     → | 30 | 28 | 35 |...
    

Tipos de tablas admitidos por DWS

Actualmente, DWS admite tablas de almacenamiento por filas, tablas de almacenamiento por columnas 2.0, tablas HStore Opt, tablas con almacenamiento y cómputo desacoplados y tablas híbridas de almacenamiento por filas y columnas.

  • Por defecto, las tablas del sistema y las tablas de servicio de DWS son tablas de almacenamiento por filas.
  • Las tablas de almacenamiento por columnas 2.0, las tablas HStore Opt, las tablas con almacenamiento y cómputo desacoplados y las tablas híbridas de almacenamiento por filas y columnas son todas variaciones de las tablas de almacenamiento por columnas. Estas tablas evolucionan en función del almacenamiento de columnas de datos y se aplican a diferentes escenarios.

Tabla de almacenamiento por filas

En una tabla de almacenamiento por filas, puede localizar rápidamente una fila de datos específica mediante un índice, y cada operación lee al menos una fila completa a la vez.

Dicha tabla ofrece varios beneficios debido a su diseño.

  • Buen rendimiento en consultas de punto: En una consulta de punto, la tupla de una fila se puede indexar directamente.
  • Alta eficiencia de actualización: El almacenamiento por filas es excelente para manejar importaciones en tiempo real y actualizaciones simultáneas.

Sin embargo, tiene algunas desventajas:

  • Uso elevado de almacenamiento: Actualmente, DWS utiliza múltiples versiones para almacenar datos antes y después de las actualizaciones. Como resultado, los datos sucios también ocupan espacio de almacenamiento.
  • Amplificación de lectura: El acceso a solo una o dos columnas de una tabla amplia a menudo ocasiona una amplificación de lectura elevada porque requiere leer toda la página y todas sus tuplas.

Las tablas de almacenamiento por filas funcionan de manera eficiente en los sistemas OLTP tradicionales, donde las tareas como agregar, eliminar, actualizar y consultar datos se realizan con frecuencia.

Ejemplo:

1
2
3
4
5
6
-- Default type. Set ORIENTATION to ROW or retain the default value.
CREATE TABLE table_row
(
    c1 INT,
    c2 TEXT
) WITH (ORIENTATION = ROW);

Tabla de almacenamiento por columnas

Las tablas de almacenamiento por filas pueden enfrentar problemas de rendimiento durante el análisis y las consultas complejas, particularmente con grandes conjuntos de datos. En tales casos, se puede considerar el uso de tablas de almacenamiento por columnas.

Las tablas de almacenamiento por columnas ofrecen estos beneficios:

  • Consultas por lotes eficientes: El almacenamiento por columnas funciona mejor para analizar columnas específicas, especialmente en tablas grandes con muchas columnas (por ejemplo, 1,000 columnas).
  • Espacio de almacenamiento reducido: El almacenamiento por columnas admite altas tasas de compresión debido a los tipos de datos uniformes dentro de cada columna.

Para escenarios OLAP, se pueden priorizar las tablas de almacenamiento por columnas. Para obtener más detalles sobre los casos de uso de las tablas de almacenamiento por columnas 2.0, las tablas HStore Opt, las tablas con almacenamiento y cómputo desacoplados (tablas de almacenamiento por columnas 3.0) y las tablas híbridas de almacenamiento por filas y columnas, consulte las siguientes secciones.

Tablas de almacenamiento por columnas 2.0

Una tabla de almacenamiento por columnas 2.0 comienza como una tabla de almacenamiento por columnas básica. Los datos de cada columna se agrupan en una unidad de compresión (CU) según el tamaño. Una vez comprimidos, estos datos se almacenan en un archivo físico. Una tabla auxiliar gestiona la visibilidad de las transacciones a nivel de CU.

Las tablas de almacenamiento por columnas 2.0 se han utilizado ampliamente en muchas aplicaciones.

Ejemplo:

1
2
3
4
5
6
-- Set ORIENTATION to COLUMN.
CREATE TABLE table_col
(
    c1 INT,
    c2 TEXT                                     
) WITH (ORIENTATION = COLUMN);

Tablas HStore Opt

Las tablas de almacenamiento por columnas 2.0 superan a las tablas de almacenamiento por filas para consultas grandes y complejas, pero tienen limitaciones. No admiten actualizaciones o importaciones simultáneas, ya que la visibilidad de las transacciones depende de las CU.

Las tablas HStore Opt abordan estas limitaciones gestionando la creciente complejidad de la carga de trabajo y satisfaciendo la creciente necesidad de actualizaciones e importaciones de datos en tiempo real. Combinan los beneficios de las tablas de almacenamiento por filas y las tablas de almacenamiento por columnas. Basadas en las tablas de almacenamiento por columnas 2.0, las tablas HStore Opt mejoran el rendimiento de la importación concurrente. Los cambios en tiempo real, como adiciones, eliminaciones y actualizaciones, se realizan en una tabla de almacenamiento por filas, y luego un subproceso en segundo plano fusiona estos datos en las CU. Esto garantiza las capacidades de compresión y análisis de datos.

En los últimos años, las crecientes demandas de procesamiento en tiempo real han hecho que las tablas HStore Opt sean más populares que las tablas de almacenamiento por columnas 2.0.

Ejemplo:

1
2
3
4
5
6
--Set ENABLE_HSTORE_OPT to TRUE for a column-store table.
CREATE TABLE table_hstore
(
    c1 INT,
    c2 TEXT                                     
) WITH (ORIENTATION = COLUMN, ENABLE_HSTORE_OPT = TRUE);

Tablas con almacenamiento y cómputo desacoplados

Las tablas HStore Opt pueden procesar solicitudes en tiempo real. Sin embargo, las tablas de almacenamiento por columnas tienen la característica AppendOnly, por lo que las inserciones o actualizaciones simultáneas frecuentes pueden aumentar rápidamente el tamaño de los archivos CU. El almacenamiento de EVS es costoso.

Las tablas con almacenamiento y cómputo desacoplados resuelven los problemas almacenando los archivos CU en OBS (un almacenamiento de objetos distribuido y de bajo costo de Huawei). Al utilizar discos EVS locales como caché, estas tablas mantienen un alto rendimiento de lectura/escritura mientras reducen significativamente los costos. OBS le permite escalar el almacenamiento sin límites y cambiar los recursos de cómputo rápidamente.

Las tablas son ideales para cargas de trabajo que priorizan los costos de almacenamiento y la elasticidad.

Ejemplo:

1
2
3
4
5
6
7
-- Select a cluster with decoupled storage and compute.
-- Set COLVERSION to 3.0 for a HStore table.
CREATE TABLE table_v3
(
    c1 INT,
    c2 TEXT                                     
) WITH (ORIENTATION = COLUMN, ENABLE_HSTORE_OPT = TRUE, COLVERSION = 3.0);

Tablas híbridas de almacenamiento por filas y columnas

Las tablas de almacenamiento por columnas 2.0, las tablas HStore Opt y las tablas con almacenamiento y cómputo desacoplados son excelentes para consultas por lotes, importaciones en tiempo real y gestión de espacio, pero aún no logran igualar la velocidad de consulta de punto de las tablas de almacenamiento por filas. Las tablas híbridas de almacenamiento por filas y columnas guardan los datos en formatos de filas y columnas. Este enfoque utiliza espacio adicional, pero aumenta la velocidad de consulta de punto.

Los dos formatos se mantienen de forma independiente y se actualizan de forma sincrónica. El optimizador de consultas selecciona una forma óptima de acceder a los datos mediante el análisis de la ruta de la consulta. Aprovecha el filtrado integrado del almacenamiento por columnas para gestionar automáticamente la ruta de E/S y elegir entre los formatos de filas y columnas para el acceso a los datos. Las tablas híbridas de almacenamiento por filas y columnas combinan la fuerte compresión y el alto throughput del almacenamiento por columnas con el acceso flexible a los datos locales del almacenamiento por filas.

Estas tablas funcionan bien para programar datos en consultas mixtas. Reducen los costos totales de E/S, aumentan las tasas de aciertos de datos y mejoran la velocidad de consulta.

Ejemplo:

1
2
3
4
5
6
-- Set STORAGE_MODE to MIX for an HStore table.
CREATE TABLE table_mix
(
    c1 INT,
    c2 TEXT                                     
) WITH (ORIENTATION = COLUMN, ENABLE_HSTORE_OPT = TRUE, STORAGE_MODE = MIX);

Selección del tipo de tabla

El almacenamiento de filas y columnas tiene sus propias ventajas y desventajas. El almacenamiento de filas sobresale en el procesamiento de transacciones, mientras que el almacenamiento de columnas funciona mejor para el análisis de big data. El avance de la tecnología ha difuminado la línea entre el almacenamiento de filas y columnas, lo que ha llevado a las bases de datos modernas a adoptar enfoques híbridos para diversos requisitos. Al seleccionar un método de almacenamiento para su base de datos, debe tener en cuenta sus casos de uso específicos, tipos de consultas y rendimiento deseado.

Tabla 1 Diferencias entre los tipos de tabla

Dimensión

Tabla de almacenamiento por filas

Tabla de almacenamiento por columnas 2.0

Tabla HStore Opt

Tabla con almacenamiento y cómputo desacoplados

Tabla híbrida de almacenamiento por filas y columnas

Almacenamiento de datos

Los atributos de una tupla se almacenan cerca.

Los valores de un atributo se almacenan cerca en la unidad de CU.

Los datos se almacenan en las tablas de almacenamiento por columnas primarias como CU. Los datos insertados en pequeños lotes y las columnas que se actualizarán se serializan y luego se almacenan en una tabla delta de diseño nuevo.

Al igual que una tabla HStore, la tabla guarda los archivos de CU en OBS.

Los datos se almacenan en formatos de filas y columnas.

Escritura de datos

No se admite la compresión. Los datos se almacenan en su forma original, lo que ocupa una gran cantidad de espacio en disco.

Se admite la compresión. Cada columna contiene valores del mismo atributo, lo que garantiza una compresión efectiva. La escritura de datos utiliza recursos mínimos de E/S y ahorra espacio en disco.

Los datos insertados en lotes se escriben directamente en CU, que son tan fáciles de comprimir como el almacenamiento por columnas. Los datos insertados en pequeños lotes y las columnas que se actualizarán se serializan y luego se comprimen. También se fusionarán periódicamente con las CU de la tabla principal.

Al igual que una tabla HStore, la tabla guarda los datos de CU en OBS de forma asincrónica.

Al igual que una tabla HStore, la tabla almacena datos como CU en formatos de fila y columna, lo que requiere más espacio. Sin embargo, su característica de compresión lo hace más compacto que las tablas de almacenamiento por filas estándar.

Actualización de datos

Los datos se actualizan por fila, lo que evita conflictos de bloqueo de CU. El rendimiento de las operaciones simultáneas (UPDATE/UPSERT/DELETE) es alto.

Es necesario bloquear toda la CU, incluso si solo se actualiza un registro en ella. Por lo general, no se admiten operaciones simultáneas (UPDATE/UPSERT/DELETE).

Se pueden evitar conflictos de bloqueo de CU. Las operaciones simultáneas (UPDATE/UPSERT/DELETE) se ejecutan más del 60 % más rápido que las de una tabla de almacenamiento por filas.

OBS tiene velocidades de lectura y escritura más lentas en comparación con los discos locales. Para mejorar el rendimiento de escritura, utiliza escrituras asincrónicas.

Sus actualizaciones simultáneas funcionan como las de una tabla HStore.

Lectura de datos

Los datos se leen por fila. Es necesario recuperar toda la fila, incluso si solo se necesita acceder a una columna en ella. El rendimiento para consultas distintas a las de punto es bajo.

Cuando los datos se leen por columna, solo es necesario acceder a la CU de una columna. Las CU se pueden comprimir fácilmente, ocupando menos recursos de E/S y logrando un alto rendimiento de lectura para una sola columna.

Los datos de una tabla de almacenamiento por columnas primaria se leen por columna. Los datos insertados en pequeños lotes y las columnas que se actualizarán se deserializan y luego se recuperan. Después de fusionar los datos con la tabla primaria, los datos se pueden leer con la misma facilidad que en el almacenamiento por columnas.

La caché de disco local acelera la lectura de datos.

El optimizador de consultas selecciona una forma óptima de acceder a los datos mediante el análisis de la ruta de la consulta. Gracias a la característica de filtrado integrado del almacenamiento por columnas, la tabla permite una gestión de ruta de E/S más inteligente y la selección automática del formato de fila o columna para el acceso a los datos.

Ventajas

El rendimiento de las actualizaciones simultáneas es alto y la capacidad de consulta de puntos es sólida.

El rendimiento de las consultas es alto y el uso del espacio en disco es pequeño.

El rendimiento de las actualizaciones simultáneas es alto. Después de fusionar los datos, el rendimiento de las consultas y la compresión coinciden con la eficiencia del almacenamiento por columnas.

La capacidad de escalamiento es sólida y el costo de almacenamiento es bajo.

Las consultas de puntos funcionan de manera eficiente y se admite la compresión de espacio. Su uso de disco es menor que el de una tabla de almacenamiento por filas.

Desventaja

Se ocupa una gran cantidad de espacio en disco y el rendimiento de las consultas es bajo.

Por lo general, no se admiten actualizaciones simultáneas.

Se requiere un subproceso permanente en segundo plano para borrar los datos innecesarios de la tabla HStore después de MERGE. Los datos se fusionan con las CU de la tabla principal y luego se borran. Esta operación no tiene relación con la sintaxis SQL MERGE.

La velocidad de lectura y escritura de OBS es más lenta que la de los discos locales.

El uso de disco es mayor que el de las tablas de almacenamiento por columnas y las tablas HStore.

Escenario

Transacciones OLTP con operaciones frecuentes de actualización y eliminación. Consultas de punto (consultas simples basadas en índices que devuelven una pequeña cantidad de datos).

Consultas y análisis OLAP. Escenarios en los que se importa un gran volumen de datos y rara vez se actualizan o eliminan después de la importación.

Actualizaciones e importaciones de alta concurrencia y consultas de alto rendimiento.

Sistemas que requieren escalamiento rápido o almacenamiento asequible.

Sistemas que necesitan actualizaciones de datos en tiempo real, consultas y análisis de big data y rendimiento de consultas de punto.