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. Se indexa solo un valor de cada fila; este es conocido como la clave de fila. Bigtable es ideal para almacenar grandes cantidades de datos con una sola clave y con 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 por sobre una instalación de HBase con administración automática:
- Gran escalabilidad. Bigtable escala en proporción directa a la cantidad de máquinas de tu clúster. Una instalación de HBase con administración automática tiene un diseño de cuello de botella que limita el rendimiento cuando se llega a cierto límite. Bigtable no tiene este cuello de botella, por lo que puedes escalar tu clúster para admitir 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 la instancia y la replicación comenzará automáticamente. Ya no administres réplicas o regiones; solo diseña los esquemas de tu tabla, 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 unas horas para admitir una carga grande y, luego, volver a reducirlo sin tiempo de inactividad. Cuando se cambia el tamaño de un clúster, por lo general, Bigtable tarda solo unos minutos en equilibrar el rendimiento entre todos los nodos.
Usos ideales
Bigtable es ideal para las aplicaciones que requieren capacidad de procesamiento alta y escalabilidad para datos de par 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 la CPU y la 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 tasas 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 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. Cada fila se indexa según una clave de fila, y 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 columna. Si almacenas más de una celda en una columna, se proporciona un registro de cómo han cambiado los datos almacenados para esa fila y esa columna a lo largo del tiempo. Las tablas de Bigtable son dispersas. Si una columna no se usa en una fila en particular, no ocupa ningún espacio.
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 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 están organizados en un clúster de Bigtable, que pertenece a una instancia de Bigtable, un contenedor del clúster.
Cada nodo del clúster controla un subconjunto de solicitudes. Si se agregan nodos al clúster, puedes aumentar la cantidad de solicitudes simultáneas que este puede manejar. Agregar nodos también aumenta la capacidad de procesamiento máxima del clúster. Si agregas clústeres adicionales para habilitar la replicación, también puedes enviar distintos tipos de tráfico a cada clúster. Luego, si un clúster deja de estar disponible, puedes realizar la conmutación por error a otro.
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. Los tablets 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, en el que los valores y las claves son strings de bytes arbitrarios. 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 apenas Bigtable las reconoce, lo que proporciona 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:
- Volver a balancear las tablets de un nodo a otro es un proceso muy expedito, porque 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.
Consulta Instancias, clústeres y nodos para obtener más información sobre cómo trabajar con estos componentes fundamentales.
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. En este proceso, se dividen los tablets más activos o grandes en dos partes y se combinan los más pequeños o con menos acceso; de esta forma, se redistribuyen 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 las divisiones, las combinaciones y el rebalanceo de forma automática, lo que ahorra a los usuarios el esfuerzo de la administración manual de sus tablets. Información sobre el rendimiento ofrece 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 lograrlo es con las claves de fila que no siguen 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.
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 utilizan en una fila de Bigtable no ocupan ningún espacio en esa fila. En esencia, cada fila es una recopilación de entradas de par clave-valor, en la que la clave es una combinación entre la familia de columnas, el calificador de columnas y la marca de tiempo. Si una fila no incluye un valor para una columna específica, la entrada de par clave-valor no se encuentra 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 usarlos como datos.
Para obtener más información sobre los calificadores de columnas, consulta Columnas.
Compactaciones
Bigtable vuelve a escribir tus tablas de forma periódica para quitar las entradas borradas y reorganizar los datos a fin de que las operaciones de lectura y escritura sean más eficientes. Este proceso se conoce como compactación. No es necesario configurar nada para la compactación, Bigtable la ejecuta automáticamente.
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 automáticamente con un algoritmo inteligente. No puedes configurar los ajustes de compresión de tu tabla. Sin embargo, puede resultarte útil saber cómo almacenar datos a fin de que se compriman de forma eficiente:
- Los datos aleatorios no se pueden comprimir con tanta eficacia como los que siguen un patrón. 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 ordenas las filas que contengan la misma información para que queden juntas, los datos se comprimirán de manera más eficiente.
- Bigtable comprime valores de hasta 1 MiB de tamaño. Si almacenas valores superiores a 1 MiB, comprimelos 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, el sistema de archivos interno de alta durabilidad de Google, con dispositivos de almacenamiento en los centros de datos de Google. No es necesario que ejecutes un clúster HDFS ni ningún otro sistema de archivos para usar Bigtable. En segundo plano, Google usa sus métodos de almacenamiento para ofrecer una durabilidad muy superior a la de la replicación HDFS estándar 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 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. 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 lo controla tu proyecto de Google Cloud y las funciones 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 si creas una vista autorizada de una tabla que represente un subconjunto de los datos de la tabla. Luego, puedes otorgar permisos autorizados a nivel de la vista a algunos usuarios sin otorgarles permisos a nivel de la tabla.
Puedes administrar la seguridad a nivel del proyecto, la instancia, la tabla o las vistas autorizadas. Bigtable no admite restricciones de seguridad a nivel de las filas, de las columnas o de las celdas.
Encriptación
De forma predeterminada, todos los datos almacenados en Google Cloud, incluidos los de las tablas de Bigtable, están encriptados en reposo mediante 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, restablecerlos en una tabla nueva más adelante. Con las copias de seguridad y las copias de seguridad, puedes restablecer en una tabla nueva en cualquier región o proyecto en el que tengas una instancia de Bigtable, independientemente de dónde esté la tabla de origen.
Captura de datos modificados
Bigtable proporciona la captura de datos modificados (CDC) en forma de flujos de cambios. Los flujos de cambios te permiten capturar y transmitir cambios de datos a una tabla mientras ocurren. Puedes leer un flujo de cambios con un servicio como Dataflow para admitir casos de uso, como estadísticas de datos, auditorías, requisitos de archivado y activación de la lógica de la aplicación descendente. 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. Las opciones para las políticas de enrutamiento 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 en una instancia, incluidas las siguientes opciones:
- Cualquier clúster: Cualquier clúster de la instancia puede recibir solicitudes.
- Enrutamiento de grupo de clústeres: Un grupo especificado de clústeres en la instancia puede recibir solicitudes.
Otras opciones de almacenamiento y base de datos
Bigtable no es una base de datos relacional tradicional. Si bien admite consultas SQL, es posible que ciertos casos de uso sean más adecuados para otra opción de base de datos.
- Si necesitas consultas interactivas con un sistema de procesamiento analítico en línea (OLAP), considera BigQuery.
- Si necesitas almacenar objetos altamente estructurados en una base de datos de documentos con compatibilidad para transacciones ACID y consultas similares a SQL, considera Firestore.
- Para el almacenamiento de datos en memoria con baja latencia, considera Memorystore.
- Para sincronizar datos entre usuarios en tiempo real, usa Firebase Realtime Database.
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?
- Prueba una guía de inicio rápido de Bigtable con la CLI de
cbt
, la herramienta de línea de comandos para Bigtable. - Trabaja en un codelab de Bigtable.
- Obtén más información sobre las instancias, los clústeres y los nodos de Bigtable.
- Aprende a crear una instancia de Bigtable.
- Obtén información sobre las bibliotecas cliente para Cloud Bigtable.
- Lee el documento original de OSDI sobre Bigtable.