Lecturas

En esta página , se describen los tipos de solicitudes de lectura que puedes enviar a Bigtable, se analizan las implicaciones de rendimiento y se presentan algunas recomendaciones para tipos específicos de consultas. Antes de leer esta página, debes estar familiarizado con la descripción general de Bigtable.

Descripción general

Las solicitudes de lectura a Bigtable transmiten de vuelta el contenido de las filas solicitadas en orden de clave, lo que significa que se muestran en el orden en que se almacenan. Puedes leer cualquier escritura que muestre una respuesta.

Las consultas que admite tu tabla deben ayudar a determinar el tipo de lectura que mejor se adapte a tu caso práctico. Las solicitudes de lectura de Bigtable se dividen en dos categorías generales:

  • Lee una sola fila
  • Análisis o lectura de varias filas

Las lecturas son atómicas a nivel de fila. Esto significa que cuando envías una solicitud de lectura para una fila, Bigtable muestra la fila completa o, en el caso de que la solicitud falle, no muestra ninguna. Nunca se muestra una fila parcial, a menos que solicites una en particular.

Te recomendamos que uses nuestras bibliotecas cliente de Cloud Bigtable para leer datos de una tabla en lugar de llamar directamente a la API. Las muestras de código que indican cómo enviar solicitudes de lectura están disponibles en varios lenguajes. Todas las solicitudes de lectura realizan la llamada a la API ReadRows.

Lee datos con el procesamiento sin servidores de Data Boost

Bigtable Data Boost te permite ejecutar trabajos de lectura y consultas por lotes sin afectar el tráfico diario de aplicaciones. Data Boost es un servicio de procesamiento sin servidores que puedes usar para leer los datos de Bigtable mientras tu aplicación principal usa los nodos del clúster para el procesamiento.

Data Boost es ideal para los análisis y no se recomienda para las lecturas de una sola fila. No puedes usar Data Boost para análisis inversos. Para obtener más información y los criterios de elegibilidad, consulta la descripción general de Data Boost.

Lecturas de una sola fila

Puedes solicitar una sola fila según la clave de fila. Las lecturas de una sola fila, también conocidas como lecturas puntuales, no son compatibles con Data Boost. Las muestras de código están disponibles para las siguientes variaciones:

Análisis

Los análisis son la forma más común de leer datos de Bigtable. Para leer un rango de filas contiguas o varios rangos de filas desde Bigtable, especifica un prefijo de clave de fila o las claves de fila inicial y final. Las muestras de código están disponibles para las siguientes variaciones:

Análisis inverso

Los análisis inversos te permiten leer un rango de filas hacia atrás mediante la especificación de un prefijo de clave de fila o un rango de filas. El prefijo de la clave de fila se usa como punto iniciador del análisis para leer hacia atrás. Si especificas un rango de filas, la clave de fila final se usa como el punto de inicio del análisis.

El análisis en orden inverso puede ser útil en las siguientes situaciones:

Los análisis inversos son menos eficientes que los reenvíos. En general, diseña las claves de fila de modo que la mayoría de los análisis sean hacia delante. Usa análisis inversos para análisis cortos, como 50 filas o menos, a fin de mantener un tiempo de respuesta de latencia baja.

Para realizar un análisis inverso, establece el valor del campo ReadRowsRequest reversed en verdadero. El valor predeterminado es falso.

Los análisis inversos están disponibles cuando usas las siguientes bibliotecas cliente:

  • Biblioteca cliente de Bigtable para C++ versión 2.18.0 o posterior
  • Biblioteca cliente de Bigtable para Go versión 1.21.0 o posterior
  • Biblioteca cliente de Bigtable para Java versión 2.24.1 o posterior
  • Cliente de Bigtable HBase para Java versión 2.10.0 o posterior

Para ver muestras de código que ilustran cómo usar análisis inversos, consulta Cómo realizar análisis inverso.

Ejemplos de casos de uso

En los siguientes ejemplos, se muestra cómo se pueden usar los análisis inversos para encontrar la última vez que un cliente cambió su contraseña y las fluctuaciones de precios de un producto en un día en particular.

Restablecimiento de contraseñas

Considera una suposición de que cada clave de fila contiene un ID de cliente y una fecha, en el formato 123ABC#2022-05-02, y que una de las columnas es password_reset, que almacena la hora en la que se restableció la contraseña. Bigtable almacena los datos de forma automática y lexicográfica, como se muestra a continuación. Ten en cuenta que la columna no existe para las filas (días) en las que no se restableció la contraseña.

`123ABC#2022-02-12,password_reset:03`
`123ABC#2022-04-02,password_reset:11`
`123ABC#2022-04-14`
`123ABC#2022-05-02`
`223ABC#2022-05-22`

Si deseas encontrar la última vez que el cliente 123ABC restableció su contraseña, puedes analizar en forma inversa un rango de 123ABC# a 123ABC#<DATE>, con la fecha de hoy o una posterior, para todas las filas que contengan la columna password_reset con un límite de filas de 1.

Cambios de precio

En este ejemplo, tus claves de fila contienen valores para el producto, el modelo y la marca de tiempo, y una de las columnas contiene el precio del producto y el modelo en un momento determinado.

`productA#model2#1675604471,price:82.63`
`productA#model2#1676219411,price:82.97`
`productA#model2#1677681011,price:83.15`
`productA#model2#1680786011,price:83.99`
`productA#model2#1682452238,price:83.12`

Si deseas ver las fluctuaciones de precios en torno al precio el 14 de febrero de 2023, aunque una clave de fila para esa fecha en particular no exista en la tabla, puedes hacer un análisis a futuro a partir de la clave de fila productA#model2#1676376000 para una cantidad de N filas y, luego, hacer un análisis inverso de la misma cantidad de filas desde la misma fila inicial. Los dos análisis te proporcionan los precios antes y después del momento determinado.

Lecturas filtradas

Si solo necesitas filas que contengan valores específicos o filas parciales, puedes usar un filtro con la solicitud de lectura. Los filtros te permiten ser muy selectivo con los datos que deseas.

Los filtros también te permiten asegurarte de que las lecturas coincidan con las políticas de recolección de elementos no utilizados que usa tu tabla. Esto es muy útil si escribes con frecuencia nuevas celdas con marcas de tiempo en columnas existentes. Debido a que la recolección de elementos no utilizados puede tardar hasta una semana en quitar los datos vencidos, el uso de un filtro de rango de marcas de tiempo a fin de leer los datos te garantiza que no leas más datos de los necesarios.

La descripción general de los filtros proporciona explicaciones detalladas de los tipos de filtros que puedes usar. El uso de filtros muestra ejemplos en varios lenguajes.

Leer datos de una vista autorizada

Para leer datos desde una vista autorizada, debes usar una de las siguientes opciones:

  • gcloud CLI
  • Cliente de Bigtable para Java

Las otras bibliotecas cliente de Bigtable aún no admiten el acceso de lectura.

Se admite cualquier método que llame a los métodos ReadRows o SampleRowKeys de la API de Bigtable Data. Cuando creas tu cliente, proporcionas el ID de vista autorizada además del ID de la tabla.

Lecturas y rendimiento

Las lecturas que usan filtros son más lentas que las que las que no los usan y, además, aumentan el uso de CPU. Por otro lado, pueden reducir en gran medida la cantidad de ancho de banda que se usa mediante la limitación de la cantidad de datos que se muestran. En general, los filtros deben usarse para controlar la eficiencia de la capacidad de procesamiento, no la latencia.

Si deseas optimizar el rendimiento de lectura, considera las siguientes estrategias:

  1. Restringe el conjunto de filas en la mayor medida posible. Limitar la cantidad de filas que los nodos deben analizar es el primer paso para mejorar el tiempo hasta el primer byte y la latencia general de la consulta. Si no restringes el conjunto de filas, es casi seguro que Bigtable tenga que analizar toda la tabla. Es por eso que recomendamos que diseñes tu propio esquema de modo tal que permita que las consultas más comunes funcionen de esta manera.

  2. Para ajustar el rendimiento aún más después de restringir el conjunto de filas, intenta agregar un filtro básico. Por lo general, restringir el conjunto de columnas o la cantidad de versiones que se muestran no aumenta la latencia y, en ocasiones, puede ayudar a Bigtable a buscar en cada fila con mayor eficiencia sin prestar atención a los datos irrelevantes.

  3. Si quieres ajustar el rendimiento de lectura todavía más después de las dos primeras estrategias, considera usar un filtro de mayor complejidad. Puedes probar esto por varias razones:

    • Todavía recibes muchos datos que no deseas.
    • Deseas simplificar el código de la aplicación mediante el envío de la consulta a Bigtable.

    Sin embargo, ten en cuenta que los filtros que requieren condiciones, intercalaciones o coincidencias de expresiones regulares en valores grandes tienden a ser más perjudiciales que beneficiosos si permiten la mayoría de los datos analizados. Este perjuicio implica un mayor uso de CPU en el clúster sin grandes ahorros para el cliente.

Además de estas estrategias, evita la lectura de una gran cantidad de claves de fila o rangos de fila no contiguos en una sola solicitud de lectura. Cuando solicitas cientos de claves de filas o rangos de filas en una sola solicitud, Bigtable analiza la tabla y lee las filas solicitadas de forma secuencial. Esta falta de paralelismo afecta la latencia general, y cualquier operación de lectura que alcance un nodo activo puede aumentar la latencia de final. Cuantos más rangos de filas se soliciten, más tiempo tardará la lectura en completarse. Si esta latencia no es aceptable, debes enviar varias solicitudes simultáneas que recuperen menos rangos de filas.

En general, leer más rangos de filas en una sola solicitud optimiza la capacidad de procesamiento, pero no la latencia. La lectura de menos rangos de filas en varias solicitudes simultáneas optimiza la latencia, pero no la capacidad de procesamiento. Encontrar el equilibrio adecuado entre la latencia y la capacidad de procesamiento dependerá de los requisitos de tu aplicación y se puede llegar a él si ajustas el recuento de solicitudes de lectura simultáneas y la cantidad de rangos de filas en una solicitud.

Filas grandes

Bigtable limita el tamaño de una fila a 256 MB, pero es posible que se exceda ese máximo de forma accidental. Si necesitas leer una fila que supera el límite, puedes paginar la solicitud y usar un filtro de cells per row limit y un filtro de cells per row offset. Ten en cuenta que, si llega una escritura para la fila entre las solicitudes de lectura paginadas, es posible que la lectura no sea atómica.

¿Qué sigue?