Descripción general de Bigtable

Bigtable es una tabla poco poblada que puede escalar hasta miles de millones de filas y miles de columnas, lo que te permite almacenar terabytes o, incluso, petabytes de datos. Bigtable es ideal para almacenar grandes cantidades de datos con una sola clave y una latencia baja. Admite una capacidad alta de procesamiento de lectura y escritura con baja latencia, y es la fuente de datos ideal para las operaciones de MapReduce.

Bigtable se expone a las aplicaciones mediante varias bibliotecas cliente, incluida una extensión compatible de la biblioteca Apache HBase para Java. Como resultado, se integra en el ecosistema existente de Apache de software de macrodatos de código abierto.

Los potentes servidores de backend de Bigtable ofrecen varias ventajas clave:

  • Gran escalabilidad. Bigtable escala en proporción directa a la cantidad de máquinas de tu clúster. Una instalación de HBase autoadministrada tiene un cuello de botella de diseño que limita el rendimiento después de que se alcanza un umbral determinado. Bigtable no tiene este cuello de botella, por lo que puedes escalar tu clúster para controlar más lecturas y escrituras.
  • Administración sencilla. Bigtable controla las actualizaciones y se reinicia con transparencia; además, mantiene automáticamente una durabilidad alta de los datos. Para replicar tus datos, agrega un segundo clúster a tu instancia y la replicación comenzará automáticamente. Ya no tendrás que administrar réplicas ni regiones; solo diseña los esquemas de tus tablas y Bigtable se encargará del resto.
  • Cambio de tamaño de clústeres sin tiempo de inactividad. Puedes aumentar el tamaño de un clúster de Bigtable durante algunas horas para controlar una carga grande y, luego, volver a reducirlo, todo sin tiempo de inactividad. Después de cambiar el tamaño de un clúster, Bigtable suele tardar solo unos minutos con carga para equilibrar el rendimiento en todos los nodos del clúster.
  • Almacenamiento por niveles (versión preliminar). Puedes almacenar los datos a los que se accede con poca frecuencia en un nivel de almacenamiento independiente y de menor costo. El almacenamiento por niveles te permite elegir el nivel de almacenamiento que mejor se adapte a tus necesidades de acceso a los datos de Bigtable.
  • Ajuste de escala automático. Puedes configurar Bigtable para que supervise de forma continua la capacidad de CPU del clúster y ajuste de forma automática la cantidad de nodos en un clúster cuando sea necesario.
  • Prueba gratuita. Puedes explorar las funciones y capacidades de Bigtable sin costo durante 10 días, con la opción de extender la prueba gratuita a 90 días. Bigtable proporciona una instancia de prueba gratuita de Bigtable con hasta 500 GB de almacenamiento en SSD y un clúster de 1 nodo, lo que te permite probar el rendimiento de tu aplicación ejecutando operaciones de lectura y escritura de gran volumen en tus tablas de Bigtable para ver cómo Bigtable controla las operaciones con rendimiento respaldado por SSD.
  • Nivel en la memoria (versión preliminar). Puedes lograr una latencia de lectura inferior a un milisegundo y una alta capacidad de procesamiento para tus datos críticos y urgentes. El nivel en la memoria extiende la unidad de estado sólido (SSD) persistente existente de Bigtable y el almacenamiento en niveles rentable con el almacenamiento en el nivel en la memoria (RAM) para proporcionar una organización de datos en niveles integrada dentro de un servicio unificado.

Ediciones de Bigtable

Las ediciones de Bigtable son un modelo de precios que proporciona diferentes capacidades a diferentes precios. Puedes elegir entre la edición estándar Enterprise y la edición premium Enterprise Plus. Para obtener más información, consulta Descripción general de las ediciones.

Usos ideales

Bigtable es ideal para las aplicaciones que requieren alta capacidad de procesamiento y escalabilidad para datos de pares clave-valor, en los que el tamaño de cada valor no suele superar los 10 MB. Bigtable también se destaca como motor de almacenamiento para las operaciones de MapReduce por lotes, las estadísticas o el procesamiento de transmisión y las aplicaciones de aprendizaje automático.

Puedes usar Bigtable para almacenar y consultar todos los siguientes tipos de datos:

  • Datos de series temporales, como el uso de CPU y memoria de varios servidores en el tiempo.
  • Datos de marketing, como historiales de compra y preferencias del cliente.
  • Datos financieros, como historiales de transacciones, precios de acciones y tipos de cambio de moneda.
  • Datos de la Internet de las cosas, como informes de uso de los medidores de energía y dispositivos particulares
  • Datos de grafos, como información sobre cómo se conectan los usuarios entre sí.

Modelo de almacenamiento de Bigtable

Bigtable almacena datos en tablas escalables de forma masiva, cada una de las cuales es un mapa de pares clave-valor ordenado. La tabla está compuesta por filas que, por lo general, describen una sola entidad, y columnas que contienen valores individuales para cada fila. Se indexa solo un valor de cada fila. Este valor se conoce como la clave de fila. Las columnas que se relacionan entre sí se suelen agrupar en una familia de columnas. Cada columna se identifica con una combinación de la familia de columnas y un calificador de columnas, que es un nombre único dentro de la familia.

Cada intersección de una fila y una columna puede contener varias celdas. Cada celda contiene una versión única con marca de tiempo de los datos para esa fila y esa columna. Almacenar varias celdas en una columna proporciona un registro de cómo cambiaron los datos almacenados para esa fila y columna con el tiempo. Las tablas de Bigtable son dispersas. Si una columna no se usa en una fila en particular, no ocupa ningún espacio.

Diagrama del modelo de almacenamiento de Bigtable

Estos son los aspectos que debes notar de la ilustración:

  • Las columnas no se pueden usar en una fila.
  • Cada celda de una fila y columna determinada tiene una marca de tiempo única (t).

Arquitectura de Bigtable

En el siguiente diagrama, se muestra una versión simplificada de la arquitectura general de recursos de Bigtable:

Arquitectura general de
Bigtable

Como se ve en el diagrama, todas las solicitudes de clientes pasan por un servidor de frontend antes de enviarse a un nodo de Bigtable. En el informe original de Bigtable, estos nodos se llaman “servidores de tablet”. Los nodos se organizan en un clúster de Bigtable, que pertenece a una instancia de Bigtable, un contenedor para el clúster.

Cada nodo del clúster controla un subconjunto de solicitudes. Si agregas nodos a un clúster, puedes aumentar la cantidad de solicitudes simultáneas que puede controlar el clúster. Agregar nodos también aumenta la capacidad de procesamiento máxima del clúster. Si habilitas la replicación agregando clústeres adicionales, también puedes enviar diferentes tipos de tráfico a clústeres distintos. Luego, si un clúster deja de estar disponible, puedes realizar la conmutación por error a otro clúster.

Una tabla de Bigtable se fragmenta en bloques de filas contiguas, llamados tablets, que ayudan a equilibrar la carga de trabajo de las consultas. Estos son similares a las regiones de HBase. Las tablets se almacenan en Colossus, un sistema de archivos desarrollado por Google, en formato SSTable. Un archivo SSTable proporciona un mapa inmutable, ordenado y persistente de claves a valores, en el que los valores y las claves son cadenas de bytes arbitrarias. Cada tablet se asocia con un nodo específico de Bigtable. Además de los archivos SSTable, todas las operaciones de escritura se almacenan en el registro compartido de Colossus en cuanto Bigtable las confirma, lo que proporciona una mayor durabilidad.

Los datos nunca se almacenan en los nodos de Bigtable; cada nodo tiene indicadores que apuntan a un conjunto de tablets almacenados en Colossus. Como resultado, sucede lo siguiente:

  • El rebalanceo de las tablets de un nodo a otro se produce con rapidez, ya que los datos reales no se copian. Bigtable actualiza los indicadores de cada nodo.
  • Recuperarse de la falla de un nodo de Bigtable es rápido, porque solo los metadatos deben migrarse al nodo de reemplazo.
  • No se pierden datos cuando falla un nodo de Bigtable.
Si bien la introducción del nivel en la memoria (versión preliminar) y el almacenamiento por niveles (versión preliminar) agregan complejidad al modelo de almacenamiento físico, la arquitectura de recursos fundamental de las instancias, los clústeres y los nodos sigue siendo la misma. Esta arquitectura de almacenamiento híbrido permite que Bigtable use un modelo de almacenamiento coherente en todos los niveles, lo que te permite acceder a tus datos a través de la misma interfaz semántica, sin importar si residen físicamente en la RAM, en una SSD o en un almacenamiento de menor costo.

Para obtener más información sobre cómo trabajar con estos componentes fundamentales, consulta Instancias, clústeres y nodos. Para obtener detalles sobre cómo interactuar con tus datos en estos niveles, consulta Accede a los datos.

Balanceo de cargas

Cada zona de Bigtable se administra mediante un proceso principal, que balancea el volumen de los datos y la carga de trabajo dentro de los clústeres. Este proceso divide las tablets más activas o más grandes por la mitad y combina las tablets menos accedidas o más pequeñas, y las redistribuye entre los nodos según sea necesario. Si se produce un aumento repentino de tráfico, Bigtable divide el tablet en dos y, luego, pasa una de estas dos partes a otro nodo. Bigtable administra la división, la combinación y el rebalanceo de forma automática, lo que te ahorra el esfuerzo de administrar tus tablets de forma manual. En Información sobre el rendimiento, se proporcionan más detalles sobre este proceso.

Para obtener el mejor rendimiento de escritura en Bigtable, es importante que estas operaciones se distribuyan de manera uniforme entre los nodos. Una forma de lograr este objetivo es usar claves de fila que no sigan un orden predecible. Por ejemplo, los nombres de usuario tienden a distribuirse de manera más o menos uniforme en el alfabeto, por lo que incluir un nombre de usuario al comienzo de una clave de fila ayudará a distribuir mejor las escrituras.

Del mismo modo, es útil agrupar las filas relacionadas a fin de que estén adyacentes unas de otras para poder leer varias a la vez. Por ejemplo, si almacenas diferentes tipos de datos sobre el tiempo atmosférico, tu clave de fila podría ser la ubicación donde se recopilaron los datos seguida de una marca de tiempo (por ejemplo, WashingtonDC#201803061617). Este tipo de clave de fila agruparía todos los datos de una ubicación en un rango contiguo de filas. Para otras ubicaciones, la fila debería comenzar con otro identificador; si hay muchas ubicaciones recopilando datos al mismo ritmo, las escrituras se extenderán de manera uniforme entre los tablets.

Consulta Cómo elegir una clave de fila a fin de obtener más detalles sobre cómo seleccionar una clave de fila apropiada para tus datos.

Procesamiento

Bigtable ofrece diferentes opciones de procesamiento según los requisitos de tu carga de trabajo. De forma predeterminada, Bigtable usa nodos de clúster para el almacenamiento y el procesamiento.

En el caso de los trabajos de lectura de alta capacidad de procesamiento, puedes usar Data Boost para Bigtable para el procesamiento. Data Boost te permite enviar trabajos de lectura y consultas grandes con la computación sin servidores, mientras que tu aplicación principal sigue usando nodos de clúster para la computación. Enterprise Plus extiende las capacidades de estos trabajos para incluir compatibilidad con SQL, así como acceso a datos de HDD y almacenamiento por niveles. Para obtener más información, consulta Descripción general de Bigtable Data Boost.

Para las cargas de trabajo especializadas que requieren una latencia de lectura de puntos inferior a un milisegundo y una alta capacidad de procesamiento, puedes habilitar el nivel en la memoria para tus nodos de Bigtable.

Tipos de datos admitidos

Bigtable trata todos los datos como strings de bytes sin procesar para todos los propósitos. La única ocasión en que Bigtable intenta determinar el tipo es para aumentar las operaciones, en cuyo caso el objetivo debe ser un número entero de 64 bits codificado como un valor big-endian de 8 bytes.

Uso del disco y la memoria

En las siguientes secciones, se describe cómo varios componentes de Bigtable afectan el uso del disco y la memoria de tu instancia.

Columnas sin usar

Las columnas que no se usan en una fila de Bigtable no ocupan ningún espacio en esa fila. Cada fila es, en esencia, una colección de entradas de par clave-valor, en la que la clave es una combinación de la familia de columnas, el calificador de columna y la marca de tiempo. Si una fila no incluye un valor para una columna específica, la entrada de par clave-valor no está presente.

Calificadores de columnas

Los calificadores de columnas ocupan espacio en una fila, ya que cada uno de estos se almacena en la misma fila donde se utiliza. Por lo tanto, suele ser eficiente usar calificadores de columnas como datos.

Para obtener más información sobre los calificadores de columnas, consulta Columnas.

Compactaciones

Bigtable reescribe tus tablas de forma periódica para quitar las entradas borradas, reorganizar los datos, de modo que la lectura y la escritura sean más eficientes, y mover los datos como parte del almacenamiento por niveles. Este proceso se conoce como compactación. No hay parámetros de configuración para las compactaciones, ya que Bigtable compacta tus datos automáticamente. En promedio, una compactación tarda una semana en completarse y ejecutar tareas, como borrar datos o moverlos al almacenamiento por niveles.

La compactación lleva a cabo las eliminaciones identificadas por el proceso de recolección de elementos no utilizados. La compactación no inicia la compresión de datos; Bigtable comprime los bloques de datos automáticamente cuando se conservan en el almacenamiento. Para obtener más información, consulta Compresión de datos y Recolección de elementos no utilizados. Para obtener más información sobre las compactaciones en el almacenamiento por niveles, consulta Cómo funciona el almacenamiento por niveles.

Mutaciones y eliminaciones

Las mutaciones, o cambios, en una fila ocupan más almacenamiento, porque Bigtable almacena las mutaciones de manera secuencial o solo las compacta de forma periódica. Cuando Bigtable compacta una tabla, quita los valores que ya no son necesarios. Si actualizas el valor de una celda, el original y el nuevo se almacenarán en el disco durante la misma cantidad de tiempo hasta que se compacten los datos.

Las eliminaciones también ocupan almacenamiento adicional, al menos, a corto plazo, ya que son un tipo especializado de mutación. Hasta que la tabla se compacte, una eliminación ocupa más espacio en lugar de liberarlo.

Compresión de datos

Bigtable comprime tus datos de forma automática con un algoritmo inteligente cuando los datos se conservan en el disco. No puedes configurar los parámetros de compresión de tu tabla.

Compresión frente a compactación

La compresión de datos es diferente de la compactación de tablas:

  • La compresión se produce automáticamente cuando los datos se escriben y se conservan en el almacenamiento. La compresión reduce el tamaño de bytes físicos de los bloques de datos en el disco. Las métricas de uso del almacenamiento y los cargos de facturación reflejan este tamaño comprimido, en lugar del tamaño de los datos lógicos sin comprimir.

  • La compactación es un proceso de mantenimiento asíncrono en segundo plano. La compactación combina periódicamente los archivos de almacenamiento y quita de forma permanente los datos borrados y vencidos. La compactación no inicia la compresión de datos, ya que estos se almacenan en formato comprimido.

Es útil saber cómo almacenar datos para que se puedan comprimir de manera eficiente:

  • Los datos aleatorios no se pueden comprimir de manera tan eficiente como los datos con patrones. Estos últimos incluyen texto, como esta página que estás leyendo.

  • La compresión funciona mejor si los valores idénticos están cerca uno del otro, ya sea en la misma fila o en filas adyacentes. Si organizas tus claves de fila de modo que las filas con fragmentos de datos idénticos estén una al lado de la otra, los datos se pueden comprimir de manera eficiente.

  • Bigtable comprime los valores que tienen un tamaño de hasta 1 MiB. Si almacenas valores superiores a 1 MiB, comprímelos antes de escribirlos en Bigtable para ahorrar ciclos de CPU, memoria del servidor y ancho de banda de red.

Durabilidad de los datos

Cuando usas Bigtable, tus datos se almacenan en Colossus, un sistema de archivos de alta durabilidad desarrollado por Google, con dispositivos de almacenamiento en los centros de datos deGoogle Cloud. No necesitas ejecutar un clúster de HDFS ni ningún otro sistema de archivos para usar Bigtable. Tras bambalinas, Colossus usa métodos de almacenamiento de propiedad exclusiva para lograr una durabilidad de los datos que supera la que proporciona la replicación estándar de HDFS en tres direcciones.

La durabilidad mejora aún más cuando se usa la replicación. Bigtable mantiene una copia independiente de tus datos en la ubicación que seleccionas para cada clúster de una instancia replicada.

Modelo de coherencia

Las instancias de Bigtable de un solo clúster ofrecen una coherencia sólida. Según la configuración predeterminada, las instancias que tienen más de un clúster proporcionan una coherencia eventual, pero en algunos casos de uso se pueden configurar para proporcionar coherencia en tus operaciones de lectura o escritura o una coherencia sólida, según la configuración de la carga de trabajo y el perfil de la app.

Seguridad

El acceso a tus tablas de Bigtable se controla a través de tu proyecto de Google Cloud y los roles de Identity and Access Management (IAM) que asignas a los usuarios. Por ejemplo, puedes asignar funciones de IAM que eviten que los usuarios individuales lean desde las tablas, escriban en ellas o creen instancias nuevas. Si una persona no tiene acceso a tu proyecto o no tiene una función de IAM que le otorgue los permisos adecuados para Bigtable, no podrá acceder a ninguna de tus tablas.

También puedes controlar el acceso a los datos de la tabla creando una vista autorizada de una tabla que represente un subconjunto de los datos de la tabla. Luego, puedes otorgar permisos de vista autorizada a algunos usuarios sin otorgarles permisos a nivel de tabla. Puedes administrar la seguridad a nivel de proyecto, instancia, tabla o vista autorizada. Bigtable no admite restricciones de seguridad a nivel de fila, columna o celda.

Encriptación

De forma predeterminada, todos los datos almacenados en Google Cloud, incluidos los datos de las tablas de Bigtable, se encriptan en reposo con los mismos sistemas de administración de claves endurecidos que usamos para nuestros propios datos encriptados.

Si deseas tener más control sobre las claves que se usan para encriptar tus datos de Bigtable en reposo, puedes usar claves de encriptación administradas por el cliente (CMEK).

Copias de seguridad

Las copias de seguridad de Bigtable te permiten guardar una copia del esquema y los datos de una tabla y, luego, restablecerla en una tabla nueva más adelante. Con las copias de seguridad y las copias de seguridad, puedes restablecer una tabla nueva en cualquier región o proyecto en el que tengas una instancia de Bigtable, sin importar dónde se encuentre la tabla de origen.

Captura de datos modificados

Bigtable proporciona captura de datos modificados (CDC) en forma de flujos de cambios. Los flujos de cambios te permiten capturar y transmitir los cambios de datos en una tabla a medida que ocurren. Puedes leer un flujo de cambios con un servicio como Dataflow para admitir casos de uso, como análisis de datos, auditorías, requisitos de archivado y activación de la lógica de la aplicación downstream. Para obtener más información, consulta la Descripción general de los flujos de cambios.

Solicitar enrutamiento con perfiles de app

Las políticas de enrutamiento de perfil de app te permiten controlar qué clústeres manejan las solicitudes entrantes de tus aplicaciones. Bigtable ofrece los siguientes tipos de perfiles de app según el modelo de procesamiento que se use:

  • Perfiles de app estándar: usan nodos de clúster aprovisionados para controlar las solicitudes. Admiten las siguientes políticas de enrutamiento:

    • Enrutamiento de clúster único: Envía todas las solicitudes a un solo clúster.

      Puedes habilitar el nivel en la memoria (versión preliminar) solo para los perfiles de app que usan el enrutamiento de un solo clúster. Cuando configuras un perfil de app para usar el nivel en la memoria en un clúster, todo el tráfico de lectura puntual elegible usa el nivel en la memoria.

    • Enrutamiento de varios clústeres a cualquier clúster: Envía solicitudes al clúster disponible más cercano en una instancia, ya sea entre todos los clústeres o un grupo de clústeres especificado.

  • Perfiles de app de Data Boost: Usa la computación sin servidores en lugar de los nodos del clúster para aislar los trabajos de lectura de alta capacidad de procesamiento del tráfico de tu aplicación principal. Estos perfiles están restringidos a una política de enrutamiento de un solo clúster.

Otras opciones de almacenamiento y base de datos

Bigtable no es una base de datos relacional tradicional. Si bien admite consultas en SQL, es posible que ciertos casos de uso se adapten mejor a otra opción de base de datos.

  • Si necesitas consultas interactivas con un sistema de procesamiento analítico en línea (OLAP), considera BigQuery.

Para obtener más información sobre otras opciones de base de datos, consulta la descripción general de los servicios de base de datos. Google Cloud también tiene varias opciones de almacenamiento.

¿Qué sigue?