> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse® es un sistema de gestión de bases de datos SQL (DBMS) orientado a columna para el procesamiento analítico en línea (OLAP). Está disponible tanto como software de código abierto como servicio en la nube.

# ¿Qué es ClickHouse?

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

ClickHouse® es un sistema de gestión de bases de datos SQL (DBMS) de alto rendimiento, orientado a columna, para procesamiento analítico en línea (OLAP). Está disponible tanto como [software de código abierto](https://github.com/ClickHouse/ClickHouse) como [servicio en la nube](https://clickhouse.com/cloud).

<div id="what-are-analytics">
  ## ¿Qué es la analítica?
</div>

La analítica, también conocida como OLAP (Online Analytical Processing), se refiere a consultas SQL con cálculos complejos (p. ej., agregaciones, procesamiento de cadenas y operaciones aritméticas) sobre grandes volúmenes de datos.

A diferencia de las consultas transaccionales (u OLTP, Online Transaction Processing), que leen y escriben solo unas pocas filas por consulta y, por tanto, se completan en milisegundos, las consultas analíticas procesan habitualmente miles de millones y billones de filas.

En muchos casos de uso, [las consultas analíticas deben ser "en tiempo real"](https://clickhouse.com/engineering-resources/what-is-real-time-analytics), es decir, devolver un resultado en menos de un segundo.

<div id="row-oriented-vs-column-oriented-storage">
  ## Almacenamiento orientado a filas vs. orientado a columna
</div>

Ese nivel de rendimiento solo puede lograrse con la "orientación" de datos adecuada.

Las bases de datos almacenan los datos [por filas o por columnas](https://clickhouse.com/engineering-resources/what-is-columnar-database).

En una base de datos orientada a filas, las filas consecutivas de una tabla se almacenan secuencialmente una tras otra. Esta disposición permite recuperar filas rápidamente, ya que los valores de las columnas de cada fila se almacenan juntos.

ClickHouse es una base de datos orientada a columna. En estos sistemas, las tablas se almacenan como una colección de columnas; es decir, los valores de cada columna se almacenan secuencialmente uno tras otro. Esta disposición hace que sea más difícil reconstruir filas individuales (ya que ahora hay huecos entre los valores de una fila), pero las operaciones sobre columnas, como los filtros o la agregación, se vuelven mucho más rápidas que en una base de datos orientada a filas.

La diferencia se explica mejor con una consulta de ejemplo que se ejecuta sobre 100 millones de filas de [datos reales anonimizados de analítica web](/es/get-started/sample-datasets/anon-web-analytics-metrica):

```sql theme={null}
SELECT MobilePhoneModel, COUNT() AS c
FROM metrica.hits
WHERE
      RegionID = 229
  AND EventDate >= '2013-07-01'
  AND EventDate <= '2013-07-31'
  AND MobilePhone != 0
  AND MobilePhoneModel not in ['', 'iPad']
GROUP BY MobilePhoneModel
ORDER BY c DESC
LIMIT 8;
```

Puedes [ejecutar esta consulta en el ClickHouse SQL Playground](https://sql.clickhouse.com?query=U0VMRUNUIE1vYmlsZVBob25lTW9kZWwsIENPVU5UKCkgQVMgYyAKRlJPTSBtZXRyaWNhLmhpdHMgCldIRVJFIAogICAgICBSZWdpb25JRCA9IDIyOSAKICBBTkQgRXZlbnREYXRlID49ICcyMDEzLTA3LTAxJyAKICBBTkQgRXZlbnREYXRlIDw9ICcyMDEzLTA3LTMxJyAKICBBTkQgTW9iaWxlUGhvbmUgIT0gMCAKICBBTkQgTW9iaWxlUGhvbmVNb2RlbCBub3QgaW4gWycnLCAnaVBhZCddIApHUk9VUCBCWSBNb2JpbGVQaG9uZU1vZGVsCk9SREVSIEJZIGMgREVTQyAKTElNSVQgODs\&chart=eyJ0eXBlIjoicGllIiwiY29uZmlnIjp7InhheGlzIjoiTW9iaWxlUGhvbmVNb2RlbCIsInlheGlzIjoiYyJ9fQ\&run_query=true), que selecciona y filtra [solo unas pocas de las más de 100](https://sql.clickhouse.com/?query=U0VMRUNUIG5hbWUKRlJPTSBzeXN0ZW0uY29sdW1ucwpXSEVSRSBkYXRhYmFzZSA9ICdtZXRyaWNhJyBBTkQgdGFibGUgPSAnaGl0cyc7\&tab=results\&run_query=true) columnas existentes, y devuelve el resultado en cuestión de milisegundos:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ddNWBC5mE_w-syUp/images/column-oriented-example-query.png?fit=max&auto=format&n=ddNWBC5mE_w-syUp&q=85&s=bbf9f7b529c87ddb42e9bfe1e0b05a2b" alt="Consulta de ejemplo en una base de datos orientada a columna" size="lg" width="2496" height="1080" data-path="images/column-oriented-example-query.png" />

Como puedes ver en la sección de estadísticas del diagrama anterior, la consulta procesó 100 millones de filas en 92 milisegundos, con un rendimiento de algo más de 1.000 millones de filas por segundo, o algo menos de 7 GB de datos transferidos por segundo.

**DBMS orientado a filas**

En una base de datos orientada a filas, aunque la consulta anterior solo procesa unas pocas de las columnas existentes, el sistema sigue necesitando cargar en memoria desde disco los datos de otras columnas existentes. Esto se debe a que los datos se almacenan en disco en fragmentos llamados [bloques](https://en.wikipedia.org/wiki/Block_\(data_storage\)) (normalmente de tamaño fijo, p. ej., 4 KB u 8 KB). Los bloques son las unidades de datos más pequeñas que se leen del disco a la memoria. Cuando una aplicación o base de datos solicita datos, el subsistema de E/S de disco del sistema operativo lee del disco los bloques necesarios. Aunque solo se necesite una parte de un bloque, se lee el bloque completo en memoria (esto se debe al diseño del disco y del sistema de archivos):

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/0xkAyEEn8ANRFZGQ/images/row-oriented.gif?s=65d32283890f54b87398e0bddf1a0ec3" alt="Estructura de una base de datos orientada a filas" size="lg" width="630" height="258" data-path="images/row-oriented.gif" />

**DBMS orientado a columna**

Dado que los valores de cada columna se almacenan secuencialmente en disco, uno tras otro, no se cargan datos innecesarios cuando se ejecuta la consulta anterior.
Como el almacenamiento y la transferencia por bloques del disco a la memoria se ajustan al patrón de acceso a los datos de las consultas analíticas, solo se leen del disco las columnas necesarias para una consulta, lo que evita operaciones de E/S innecesarias sobre datos que no se utilizan. Esto es [mucho más rápido](https://benchmark.clickhouse.com/) en comparación con el almacenamiento basado en filas, donde se leen filas completas (incluidas las columnas irrelevantes):

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ddNWBC5mE_w-syUp/images/column-oriented.gif?s=43234d1f2e731088ce5e59de023a4d00" alt="Estructura de base de datos orientada a columna" size="lg" width="630" height="258" data-path="images/column-oriented.gif" />

<div id="data-replication-and-integrity">
  ## Replicación e integridad de los datos
</div>

ClickHouse utiliza un esquema de replicación multimaestro asíncrono para garantizar que los datos se almacenen de forma redundante en varios nodos. Una vez que se escriben en cualquier réplica disponible, todas las demás réplicas obtienen su copia en segundo plano. El sistema mantiene datos idénticos en las distintas réplicas. La recuperación tras la mayoría de los fallos se realiza de forma automática o, en casos complejos, semiautomática.

<div id="role-based-access-control">
  ## Control de acceso basado en roles
</div>

ClickHouse implementa la gestión de cuentas de usuario mediante consultas SQL y permite configurar el control de acceso basado en roles, de forma similar a lo que se encuentra en el estándar ANSI SQL y en los sistemas de gestión de bases de datos relacionales más populares.

<div id="sql-support">
  ## Compatibilidad con SQL
</div>

ClickHouse admite un [lenguaje de consultas declarativo basado en SQL](/es/reference/home) que coincide con el estándar ANSI SQL en muchos casos. Entre las cláusulas de consulta admitidas se incluyen [GROUP BY](/es/reference/statements/select/group-by), [ORDER BY](/es/reference/statements/select/order-by), subconsultas en [FROM](/es/reference/statements/select/from), la cláusula [JOIN](/es/reference/statements/select/join), el operador [IN](/es/reference/statements/in), [funciones de ventana](/es/reference/functions/window-functions) y subconsultas escalares.

<div id="approximate-calculation">
  ## Cálculo aproximado
</div>

ClickHouse ofrece formas de sacrificar precisión a cambio de rendimiento. Por ejemplo, algunas de sus funciones de agregación calculan de forma aproximada el recuento de valores distintos, la mediana y los cuantiles. Además, las consultas pueden ejecutarse sobre una muestra de los datos para obtener rápidamente un resultado aproximado. Por último, las agregaciones pueden ejecutarse con un número limitado de claves en lugar de hacerlo para todas ellas. Dependiendo de lo sesgada que esté la distribución de las claves, esto puede proporcionar un resultado razonablemente preciso usando muchos menos recursos que un cálculo exacto.

<div id="adaptive-join-algorithms">
  ## Algoritmos de join adaptativos
</div>

ClickHouse elige el algoritmo de join de forma adaptativa: comienza con hash joins rápidos y recurre a merge joins si hay más de una tabla grande.

<div id="superior-query-performance">
  ## Rendimiento superior de las consultas
</div>

ClickHouse es ampliamente conocido por ofrecer un rendimiento de consulta extremadamente rápido.
Para saber por qué ClickHouse es tan rápido, consulta la guía [Why is ClickHouse fast?](/es/get-started/about/why-clickhouse-is-so-fast).
