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.

Cómo leer datos con la computación 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 un servicio de procesamiento sin servidores que puedes usar para leer tus datos de Bigtable mientras tu aplicación principal usa los nodos de tu clúster para el procesamiento.

Data Boost es ideal para las exploraciones y no se recomienda para las operaciones de lectura de una sola fila. No puedes usar Data Boost para 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 operaciones de lectura de una sola fila, también conocidas como lecturas de punto, 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, ya sea especificando un prefijo de clave de fila o un rango de filas. El prefijo de clave de fila se usa como punto inicial 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 escaneo en orden inverso puede ser útil en las siguientes situaciones:

  • Quieres encontrar un evento (fila) y, luego, leer la cantidad N de eventos anteriores.
  • Quieres encontrar el valor más alto antes de un valor determinado. Esto puede ser útil cuando almacenas datos de series temporales con una marca de tiempo como sufijo de clave de fila.

Los análisis inversos son menos eficientes que los directos. 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 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 muestran cómo usar análisis inversos, consulta Cómo realizar un análisis inverso.

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

Supongamos 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) 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 reversa un rango de 123ABC# a 123ABC#<DATE>, con la fecha de hoy o una fecha futura, para todas las filas que contengan 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 deseas encontrar fluctuaciones de precios en torno al precio del 14 de febrero de 2023, aunque no exista una clave de fila para esa fecha en particular en la tabla, puedes realizar un análisis hacia adelante a partir de la clave de fila productA#model2#1676376000 para una cantidad N de filas y, luego, realizar un análisis inverso para la misma cantidad de filas desde 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 de 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 a vistas.

Se admite cualquier método que llame al método ReadRows o SampleRowKeys de la API de Bigtable Data. Cuando creas tu cliente, proporcionas el ID de vista autorizado 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 expresión regular 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?