Descripción general sobre Bigtable
Bigtable es una tabla poco densa que puede escalarse a miles de millones de filas y miles de columnas, lo que le permite almacenar terabytes o incluso petabytes de datos. Se indexa un solo valor en cada fila. Este valor se conoce como "clave de fila". Bigtable es idóneo para almacenar grandes cantidades de datos con una sola clave y una latencia baja. Admite un alto rendimiento de lectura y escritura con una latencia baja, y es una fuente de datos ideal para las operaciones de MapReduce.
Bigtable se expone a las aplicaciones a través de varias bibliotecas de cliente, incluida una extensión compatible de la biblioteca Apache HBase para Java. Por lo tanto, se integra con el ecosistema de software de Big Data de código abierto de Apache.
Los potentes servidores backend de Bigtable ofrecen varias ventajas clave con respecto a una instalación autogestionada de HBase:
- Escalabilidad increíble. Bigtable se escala de forma directamente proporcional al número de máquinas de tu clúster. Una instalación de HBase autogestionada tiene un cuello de botella de diseño que limita el rendimiento una vez que se alcanza un umbral determinado. Bigtable no tiene este cuello de botella, por lo que puedes ampliar tu clúster para gestionar más lecturas y escrituras.
- Administración sencilla. Bigtable gestiona las actualizaciones y los reinicios de forma transparente, y mantiene automáticamente una alta durabilidad de los datos. Para replicar los datos, añade un segundo clúster a tu instancia y la replicación se iniciará automáticamente. Ya no tendrás que gestionar réplicas ni regiones. Solo tienes que diseñar los esquemas de tus tablas y Bigtable se encargará del resto.
- Cambio de tamaño de clústeres sin periodos de inactividad. Puedes aumentar el tamaño de un clúster de Bigtable durante unas horas para gestionar una carga grande y, después, volver a reducirlo, todo ello sin periodos de inactividad. Después de cambiar el tamaño de un clúster, Bigtable suele tardar unos minutos en equilibrar el rendimiento entre todos los nodos del clúster.
- Autoescalado. Puedes configurar Bigtable para que monitorice continuamente la capacidad de CPU del clúster y ajuste automáticamente el número de nodos de un clúster cuando sea necesario.
¿Para qué sirve?
Bigtable es ideal para aplicaciones que necesitan un alto rendimiento y escalabilidad para datos de pares clave-valor, donde cada valor no suele superar los 10 MB. Bigtable también destaca como motor de almacenamiento para operaciones MapReduce por lotes, procesamiento o analíticas de flujos y aplicaciones de aprendizaje automático.
Puede usar Bigtable para almacenar y consultar todos los tipos de datos siguientes:
- Datos de series temporales, como el uso de la CPU y la memoria a lo largo del tiempo en varios servidores.
- Datos de marketing, como historiales de compras y preferencias de los clientes.
- Datos financieros, como historiales de transacciones, precios de acciones y tipos de cambio de divisas.
- Datos del Internet de las cosas, como informes de uso de contadores de energía y electrodomésticos.
- Datos de gráficos, como información sobre cómo se conectan los usuarios entre sí.
Modelo de almacenamiento de Bigtable
Bigtable almacena datos en tablas masivamente escalables, cada una de las cuales es un mapa de clave-valor ordenado. La tabla se compone de filas, cada una de las cuales suele describir una sola entidad, y columnas, que contienen valores individuales de cada fila. Cada fila se indexa mediante una sola clave de fila, y las columnas relacionadas entre sí suelen agruparse en una familia de columnas. Cada columna se identifica mediante una combinación de la familia de columnas y un calificador de columna, que es un nombre único dentro de la familia de columnas.
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 de esa fila y columna. Almacenar varias celdas en una columna proporciona un registro de cómo han cambiado los datos almacenados de esa fila y columna a lo largo del tiempo. Las tablas de Bigtable son dispersas. Si no se usa una columna en una fila concreta, no ocupa espacio.
Algunos aspectos que debes tener en cuenta en esta ilustración:
- Las columnas pueden no usarse en una fila.
- Cada celda de una fila y una columna determinadas 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 Bigtable:
Como se muestra en el diagrama, todas las solicitudes de los clientes pasan por un servidor frontend antes de enviarse a un nodo de Bigtable. En el artículo original sobre Bigtable, estos nodos se denominan "servidores de tablets". Los nodos se organizan en un clúster de Bigtable, que pertenece a una instancia de Bigtable, un contenedor del clúster.
Cada nodo del clúster gestiona un subconjunto de las solicitudes al clúster. Si añades nodos a un clúster, puedes aumentar el número de solicitudes simultáneas que puede gestionar el clúster. Si añades nodos, también aumentará el rendimiento máximo del clúster. Si habilitas la replicación añadiendo clústeres adicionales, también puedes enviar diferentes tipos de tráfico a distintos clústeres. De esta forma, si un clúster deja de estar disponible, puedes cambiar a otro.
Una tabla de Bigtable se fragmenta en bloques de filas contiguas, denominados tablets, para ayudar a equilibrar la carga de trabajo de las consultas. (Las tablets son similares a las regiones de HBase). Las tablas se almacenan en Colossus, el sistema de archivos de Google, en formato SSTable. Una SSTable proporciona un mapa inmutable, ordenado y persistente de claves a valores, donde tanto las claves como los valores son cadenas de bytes arbitrarias. Cada tablet está asociada a un nodo de Bigtable específico. Además de los archivos SSTable, todas las escrituras se almacenan en el registro compartido de Colossus en cuanto Bigtable las confirma, lo que aumenta la durabilidad.
Es importante destacar que los datos nunca se almacenan en los propios nodos de Bigtable. Cada nodo tiene punteros a un conjunto de tablets que se almacenan en Colossus. Como resultado:
- El reequilibrio de las tablets de un nodo a otro se produce rápidamente, ya que no se copian los datos reales. Bigtable actualiza los punteros de cada nodo.
- La recuperación tras el fallo de un nodo de Bigtable es rápida, ya que solo se deben migrar los metadatos al nodo de sustitución.
- Cuando falla un nodo de Bigtable, no se pierden datos.
Consulta Instancias, clústeres y nodos para obtener más información sobre cómo trabajar con estos componentes básicos.
Balanceo de carga
Cada zona de Bigtable se gestiona mediante un proceso principal que equilibra la carga de trabajo y el volumen de datos en los clústeres. Este proceso divide las tablets más grandes o con más actividad por la mitad y combina las tablets más pequeñas o a las que se accede con menos frecuencia, redistribuyéndolas entre los nodos según sea necesario. Si una tablet determinada recibe un pico de tráfico, Bigtable la divide en dos y, a continuación, mueve una de las nuevas tablets a otro nodo. Bigtable gestiona la división, la combinación y el reequilibrio automáticamente, lo que te ahorra el esfuerzo de administrar manualmente tus tablets. En el artículo Interpretar el rendimiento se explica este proceso con más detalle.
Para obtener el mejor rendimiento de escritura de Bigtable, es importante distribuir las escrituras de la forma más uniforme posible entre los nodos. Una forma de conseguir este objetivo es usar claves de fila que no sigan un orden predecible. Por ejemplo, los nombres de usuario suelen distribuirse de forma más o menos uniforme en todo el alfabeto, por lo que, si se incluye un nombre de usuario al principio de la clave de fila, las escrituras se distribuirán de forma uniforme.
Al mismo tiempo, es útil agrupar las filas relacionadas para que estén una al lado de la otra, lo que hace que sea mucho más eficiente leer varias filas al mismo tiempo. Por ejemplo, si almacena diferentes tipos de datos meteorológicos a lo largo del tiempo, la clave de fila puede ser la ubicación en la que se recogieron 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 intervalo de filas contiguo. En otras ubicaciones, la fila empezaría con un identificador diferente. Como muchas ubicaciones recogen datos al mismo ritmo, las escrituras seguirían distribuyéndose de forma uniforme entre las tablets.
Para obtener más información sobre cómo elegir una clave de fila adecuada para tus datos, consulta Elegir una clave de fila.
Computación
De forma predeterminada, Bigtable usa nodos de clúster para el almacenamiento y el cálculo. En el caso de las tareas de lectura de alto rendimiento, puedes usar Data Boost para Bigtable para la computación. Data Boost te permite enviar grandes trabajos de lectura y consultas mediante computación sin servidor mientras tu aplicación principal sigue usando nodos de clúster para la computación. Para obtener más información, consulta el resumen de Data Boost.
Tipos de datos admitidos
Bigtable trata todos los datos como cadenas de bytes sin procesar en la mayoría de los casos. Bigtable solo intenta determinar el tipo en las operaciones de incremento, en las que el destino debe ser un número entero de 64 bits codificado como un valor big-endian de 8 bytes.
Uso de memoria y disco
En las siguientes secciones se describe cómo afectan varios componentes de Bigtable al uso de memoria y disco de tu instancia.
Columnas no utilizadas
Las columnas que no se usan en una fila de Bigtable no ocupan espacio en esa fila. Cada fila es básicamente una colección de entradas clave-valor, donde 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, no se incluye la entrada de clave-valor.
Calificadores de columna
Los calificadores de columna ocupan espacio en una fila, ya que cada calificador de columna que se usa en una fila se almacena en esa fila. Por lo tanto, suele ser eficiente usar calificadores de columna como datos.
Para obtener más información sobre los calificadores de columna, consulta Columnas.
Compaction
Bigtable reescribe periódicamente tus tablas para eliminar las entradas eliminadas y reorganizar tus datos de forma que las lecturas y las escrituras sean más eficientes. Este proceso se conoce como compresión. No hay ajustes de configuración para las compactaciones. Bigtable compacta los datos automáticamente.
Mutaciones y eliminaciones
Las mutaciones o los cambios en una fila ocupan espacio de almacenamiento adicional, ya que Bigtable almacena las mutaciones de forma secuencial y las comprime solo periódicamente. Cuando Bigtable compacta una tabla, elimina los valores que ya no son necesarios. Si actualizas el valor de una celda, tanto el valor original como el nuevo se almacenarán en el disco durante un tiempo hasta que se compacten los datos.
Las eliminaciones también ocupan espacio de almacenamiento adicional, al menos a corto plazo, porque en realidad son un tipo especializado de mutación. Hasta que se compacte la tabla, una eliminación utiliza almacenamiento adicional en lugar de liberar espacio.
Compresión de datos
Bigtable comprime tus datos automáticamente mediante un algoritmo inteligente. No puedes configurar los ajustes de compresión de tu tabla. Sin embargo, es útil saber cómo almacenar datos para que se puedan comprimir de forma eficiente:
- Los datos aleatorios no se pueden comprimir de forma tan eficiente como los datos con patrones. Los datos con patrones incluyen texto, como la página que está leyendo ahora mismo.
- La compresión funciona mejor si los valores idénticos están cerca unos de otros, ya sea en la misma fila o en filas contiguas. Si organizas las claves de las filas de forma que las filas con fragmentos de datos idénticos estén una al lado de la otra, los datos se pueden comprimir de forma eficiente.
- Bigtable comprime los valores de hasta 1 MiB. Si almacenas valores de más de 1 MiB, comprímelos antes de escribirlos en Bigtable para ahorrar ciclos de CPU, memoria del servidor y ancho de banda de la red.
Durabilidad de los datos
Cuando usas Bigtable, tus datos se almacenan en Colossus, el sistema de archivos interno de alta durabilidad de Google, mediante dispositivos de almacenamiento en los centros de datos de Google. No es necesario ejecutar un clúster de HDFS ni ningún otro sistema de archivos para usar Bigtable. En segundo plano, Google usa métodos de almacenamiento propios para conseguir una durabilidad de los datos superior a la que ofrece la replicación de tres vías estándar de HDFS.
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 selecciones 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. De forma predeterminada, las instancias que tienen más de un clúster proporcionan coherencia final, pero, en algunos casos prácticos, se pueden configurar para que proporcionen coherencia de lectura tras escritura o coherencia fuerte, en función de la carga de trabajo y de los ajustes del perfil de la aplicación.
Seguridad
El acceso a tus tablas de Bigtable se controla mediante tu Google Cloudproyecto y los roles de gestión de identidades y accesos (IAM) que asignes a los usuarios. Por ejemplo, puedes asignar roles de gestión de identidades y accesos que impidan que usuarios concretos lean o escriban datos en tablas, o que creen instancias. Si un usuario no tiene acceso a tu proyecto o no tiene un rol de gestión de identidades y accesos con los permisos adecuados para Bigtable, no podrá acceder a ninguna de tus tablas.
También puedes controlar el acceso a los datos de una tabla creando una vista autorizada de la tabla que represente un subconjunto de los datos de la tabla. Después, puede conceder permisos de vista autorizados a algunos usuarios sin concederles permisos a nivel de tabla.
Puedes gestionar la seguridad a nivel de proyecto, instancia, tabla o vista autorizada. Bigtable no admite restricciones de seguridad a nivel de fila, columna o celda.
Cifrado
De forma predeterminada, todos los datos almacenados en Google Cloud, incluidos los datos de las tablas de Bigtable, se cifran en reposo con los mismos sistemas reforzados de gestión de claves que utilizamos para proteger nuestros propios datos cifrados.
Si quieres tener más control sobre las claves que se usan para cifrar tus datos en reposo de Bigtable, puedes usar claves de cifrado gestionadas 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 restaurarla en otra tabla más adelante. Con las copias de seguridad y las copias de copias de seguridad, puedes restaurar una tabla nueva en cualquier región o proyecto en el que tengas una instancia de Bigtable, independientemente de dónde se encuentre la tabla de origen.
Captura de datos de cambios
Bigtable proporciona captura de datos de cambios (CDC) en forma de flujos de cambios. Los flujos de cambios te permiten capturar y transmitir los cambios de datos de una tabla a medida que se producen. Puedes leer un flujo de cambios mediante un servicio como Dataflow para admitir casos prácticos, como analíticas de datos, auditorías, requisitos de archivado y activación de la lógica de aplicaciones posteriores. Para obtener más información, consulta la descripción general de los flujos de cambios.
Enrutamiento de solicitudes con perfiles de aplicación
Las políticas de enrutamiento de los perfiles de aplicación te permiten controlar qué clústeres gestionan las solicitudes entrantes de tus aplicaciones. Entre las opciones de las políticas de enrutamiento se incluyen las siguientes:
- Enrutamiento de un solo clúster: envía todas las solicitudes a un solo clúster.
- Enrutamiento de varios clústeres a cualquier clúster: envía solicitudes al clúster disponible más cercano de una instancia, incluidas las siguientes opciones:
- Cualquier clúster: cualquier clúster de la instancia puede recibir solicitudes.
- Enrutamiento de grupos de clústeres: un grupo de clústeres específico de la instancia puede recibir solicitudes.
Otras opciones de almacenamiento y bases de datos
Bigtable no es una base de datos relacional tradicional. Aunque admite consultas SQL, puede que algunos casos prácticos se adapten mejor a otra opción de base de datos.
- Si necesitas hacer consultas interactivas en un sistema de procesamiento analítico online (OLAP), te recomendamos que uses BigQuery.
- Si necesitas almacenar objetos muy estructurados en una base de datos de documentos, con compatibilidad con transacciones ACID y consultas tipo SQL, te recomendamos Firestore.
- Si quieres almacenar datos en memoria con baja latencia, te recomendamos Memorystore.
- Para sincronizar datos entre usuarios en tiempo real, puedes usar Firebase Realtime Database.
Para obtener más información sobre otras opciones de bases de datos, consulta la descripción general de los servicios de bases de datos. Google Cloud también ofrece varias opciones de almacenamiento.
Siguientes pasos
- Prueba una guía de inicio rápido de Bigtable con la
CLI
cbt
, la herramienta de línea de comandos de Bigtable. - Realiza un codelab sobre Bigtable.
- Consulta información sobre las instancias, los clústeres y los nodos de Bigtable.
- Consulta cómo crear una instancia de Bigtable.
- Consulta cómo migrar a Bigtable.
- Consulta información sobre las bibliotecas de cliente de Cloud Bigtable.
- Consulta el artículo original de OSDI sobre Bigtable.