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 la computación 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 tus datos de Bigtable mientras tu aplicación principal usa los nodos de tu clúster para el procesamiento.

Data Boost es ideal para análisis y no se recomienda para 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 mediante la especificación de un prefijo de clave de fila o un rango de filas. El prefijo de clave de fila se usa como punto de inicio de análisis para leer hacia atrás. Si especificas un rango de filas, la clave de fila de finalización se usa como punto de inicio de análisis.

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

  • Deseas encontrar un evento (fila) y, luego, leer la cantidad N anterior de eventos.
  • Deseas 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 eficaces que los hacia adelante. En general, diseña tus claves de fila para que la mayoría de los análisis se realicen hacia delante. Usa análisis inversos en análisis cortos, como 50 filas o menos, para mantener un tiempo de respuesta de latencia baja.

Para realizar la búsqueda inversa, 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++ 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 las muestras de código que demuestran cómo usar los análisis inversos, consulta Analizar de forma inversa.

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 alrededor de un día determinado.

Restablecimiento 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 automáticamente los datos de forma 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 de forma inversa un rango de 123ABC# a 123ABC#<DATE>, con la fecha de hoy 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, tus claves de fila contienen valores de producto, modelo y 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 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 desde la clave de fila productA#model2#1676376000 para N cantidad de filas y, luego, realizar un análisis inverso de la misma cantidad de filas de la misma fila inicial. Los dos análisis te dan los precios antes y después del tiempo 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 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, debes proporcionar el ID de la 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 expresiones regulares que coinciden con valores grandes tienden a ser más perjudiciales si permiten que pase 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?