Lecturas

En esta página, se describen los tipos de solicitudes de lectura que puedes enviar a Bigtable, analiza las implicaciones de rendimiento y presenta 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.

Cómo leer datos con el procesamiento sin servidores de Data Boost

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

Data Boost es ideal para las búsquedas y no se recomienda para las lecturas de una sola fila. No puedes usar Data Boost para realizar análisis inversos. Para obtener más información y 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 de puntos, 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 inversos

Los análisis inversos te permiten leer un rango de filas hacia atrás con la especificación de una fila un prefijo de clave único o un rango de filas. El prefijo de clave de fila se usa como el inicio punto de búsqueda 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 escaneo en orden inverso puede ser útil en las siguientes situaciones:

  • Deseas encontrar un evento (fila) y luego leer el número N anterior de eventos.
  • Deseas encontrar el valor más alto antes de un valor determinado. Puede ser útil cuando almacenas datos de series temporales con una marca de tiempo como clave de fila sufijo.

Los análisis inversos son menos eficientes que los hacia adelante. En general, diseña tus claves de fila para que la mayoría de los análisis sean hacia adelante. Usa análisis inversos para análisis breves, como 50 filas o menos, para mantener un tiempo de respuesta de baja latencia.

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

Los análisis inversos están disponibles cuando usas lo siguiente 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 2.24.1 o posterior
  • Cliente de HBase de Bigtable para Java, versión 2.10.0 o posterior

Para ver muestras de código que demuestren cómo usar los análisis inversos, consulta Escanear en revertir.

Ejemplos de casos prácticos

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 determinado.

Restablecimientos de contraseñas

Considera suponer que cada una de tus claves de fila contiene un ID de cliente y una fecha, en el formato 123ABC#2022-05-02, y una de las columnas es password_reset, que almacena la hora en 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) cuando la contraseña no se restableció.

`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 escanear en forma inversa un rango de 123ABC# a 123ABC#<DATE>, con el fecha o una fecha futura, para todas las filas que contienen la columna password_reset con un límite de filas de 1.

Cambios de precio

En este ejemplo, las 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 quieres encontrar fluctuaciones en los precios cerca del precio del 14 de febrero, 2023, aunque una clave de fila para esa fecha en particular no exista en el puedes hacer un análisis hacia delante desde la clave de fila productA#model2#1676376000 para N cantidad de filas y, luego, realiza un análisis inverso para la misma cantidad de filas de la misma fila inicial. Los dos análisis te proporcionan los precios antes y después del horario 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.

Lee 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 objetos View el acceso a los datos.

Se admite cualquier método que llame al método ReadRows o SampleRowKeys de la API de Bigtable Data. Debes proporcionar el ID de vista autorizada además del ID de la tabla cuando crees tu cliente.

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 regex en valores grandes tienden a ser perjudiciales si permiten el acceso de 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?