Crea un índice secundario asíncrono

Puedes usar vistas materializadas continuas como índices secundarios asíncronos para las tablas.

Antes de leer esta página, familiarízate con las vistas materializadas continuas.

Por lo general, los datos de una tabla de Bigtable se indexan por claves de fila. Sin embargo, puedes crear una vista materializada continua a partir de una tabla de origen y usarla como un índice secundario asíncrono. Esto te permite recuperar los mismos datos con diferentes patrones de búsqueda de consultas consultando la vista materializada.

Un índice secundario asíncrono es una vista materializada continua que contiene un subconjunto de columnas de una tabla de origen, junto con una clave de fila que es diferente de la clave de fila de la tabla de origen. Estas claves de fila pueden basarse en las siguientes transformaciones que permiten que tu aplicación recupere los mismos datos según diferentes patrones de búsqueda de consultas:

  • Son los atributos dentro de la tabla de origen, como los calificadores de columna, los valores de columna o las partes de la clave de fila de origen.
  • Es un cambio de formato de la clave de fila.
  • Es una transformación que combina la clave de fila con un atributo.

Bigtable sincroniza los índices secundarios asíncronos con la tabla de origen automáticamente de una manera eventualmente coherente.

Cuándo usar un índice secundario asíncrono

A menudo, las aplicaciones necesitan consultar los mismos datos con diferentes patrones o atributos de búsqueda. Por ejemplo, considera una aplicación que recupera información del usuario por la dirección de correo electrónico o un número de teléfono. Es posible que desees el mismo nivel de rendimiento en ambos patrones de búsqueda. Si conviertes la dirección de correo electrónico en la clave de fila de Bigtable y almacenas los números de teléfono en una columna, el rendimiento de la búsqueda de números de teléfono será más lento porque requiere un análisis completo de la tabla.

Para mejorar el rendimiento de las consultas cuando se busca por número de teléfono, puedes crear una vista materializada continua con una instrucción de SQL. La instrucción de SQL le indica a Bigtable cómo reestructurar tus datos con una clave de fila diferente. Una vista materializada continua actúa como una tabla que puedes consultar. Luego, usas la vista como un índice secundario asíncrono. Esto le brinda a tu aplicación otra ruta de acceso a los mismos datos. Cada ruta usa una clave de fila diferente, por lo que puedes elegir una ruta alternativa para cada búsqueda. Para elegir la mejor ruta para tu consulta, comprende la estructura de la clave de fila de cada tabla y los datos que almacena cada tabla.

El uso de una vista materializada continua como índice secundario asíncrono puede mejorar el rendimiento de las consultas en los siguientes casos de uso:

  • Cambio de clave de tus datos: Si necesitas consultar tus datos con una clave diferente de las claves de fila de la tabla de origen, puedes crear una vista materializada continua con la clave alternativa y realizar consultas en esa vista.
  • Filtrado de datos: Si deseas filtrar la tabla de origen y propagar solo filas específicas de datos en el índice secundario asíncrono, proporciona una cláusula WHERE en la consulta en SQL que define la vista.
  • Claves de atributos: Si necesitas consultar tus datos en función de un atributo que no sea clave, como un calificador o un valor de columna, puedes incluirlo en tu cláusula ORDER BY.

Acerca de los índices secundarios asíncronos

Para usar una vista materializada continua en Bigtable como un índice secundario asíncrono, ten en cuenta los siguientes requisitos:

  • La clave de fila de un nuevo índice secundario asíncrono debe incluir la clave de fila de la tabla de origen para ayudar a garantizar una asignación uno a uno entre las filas de la tabla de origen y las filas del índice secundario asíncrono de la vista materializada continua.
  • El índice secundario asíncrono no tiene que tener el mismo esquema o atributos que la tabla de origen. En la parte SELECT de la consulta en SQL, debes especificar qué columnas de la tabla son necesarias y qué transformaciones de SQL de los datos deseas aplicar.
  • El índice secundario asíncrono solo necesita copiar los datos que necesitas para el patrón de consulta. No es necesario proporcionar todos los datos de origen en la tabla de origen.
  • En Bigtable, la clave de fila que elijas proporciona el orden de clasificación predeterminado.

Para consultar índices secundarios asíncronos, ten en cuenta los siguientes requisitos:

  • Todas las columnas de la cláusula ORDER BY también deben incluirse en la cláusula SELECT.
  • Una vez que definas el índice secundario asíncrono, tu aplicación debe poder elegir entre consultar la tabla de origen o la vista materializada que representa el índice secundario asíncrono.
  • Las aplicaciones no escriben directamente en el índice, que se sincroniza continuamente con la tabla de origen. Siempre se escribe en la tabla de origen.
  • El índice secundario asíncrono es coherente de forma eventual; los datos se escriben primero en la tabla de origen y, luego, se transforman al formato del índice secundario asíncrono.
  • Te recomendamos que crees un índice de cobertura. Para obtener más información, consulta la sección Índices de cobertura de este documento.
  • La cláusula ORDER BY debe contener la clave de fila sin modificar de la tabla de origen, y todos los datos deben ordenarse de forma ascendente. La clave de fila en la tabla de origen siempre se proyecta en la vista materializada; sin embargo, se puede combinar con otros atributos.
  • Las columnas de la cláusula ORDER BY pasan a formar parte de la clave de fila estructurada del índice secundario asíncrono. Todos los demás valores de las columnas seleccionadas se convierten en valores de columnas no clave en el índice secundario asíncrono. Si conviertes un valor en la cláusula ORDER BY a un tipo de datos específico de GoogleSQL para Bigtable, este conservará su tipo de datos en la clave de fila estructurada del índice secundario asíncrono.

Índices de cobertura

Un índice de cobertura incluye todas las columnas que necesitan tus búsquedas. Cuando consultas un índice de cobertura, Bigtable puede recuperar todos los datos necesarios directamente del índice, sin tener que acceder a la tabla de origen. Recomendamos este enfoque para obtener un rendimiento óptimo, ya que minimiza la cantidad de lecturas de disco. Para crear un índice de cobertura, asegúrate de que tu instrucción SELECT especifique todas las columnas que necesitas en tus consultas.

Cuando desees crear un índice no de cobertura, consulta el índice y, luego, usa los resultados para buscar las columnas adicionales que necesites de la tabla de origen.

Define un índice secundario asíncrono

Para crear un índice secundario asíncrono, crea una vista materializada continua con una consulta en SQL que defina el índice secundario asíncrono.

En el siguiente ejemplo, la consulta en SQL crea un índice secundario asíncrono que te permite consultar datos de interacciones del usuario. La cláusula ORDER BY define la clave de fila estructurada del índice secundario asíncrono, con una combinación del número de teléfono, el ID de usuario y la dirección de correo electrónico del usuario. También asigna el nombre interactions a la familia de columnas activity:

SELECT
  user['phone'] AS phone,
  CAST(user['id'] AS INT64) AS user_id,
  _key AS email,
  activity AS interactions
FROM CLICKS_TABLE
ORDER BY 1, 2, 3;

En la siguiente tabla, se explica cómo se crea el índice comparando la vista de la misma fila en la tabla de origen con el índice secundario asíncrono correspondiente:

Fila de la tabla de origen Fila de índice secundario asíncrono
Clave de fila:
_key: user1@example.com



Atributos:
user: {id: "123", phone: "555-123-4567"}
activity: {action: "CLICKED_PRODUCT_A"}
Clave de fila estructurada:
phone: 555-123-4567
user_id: 123
email: user1@example.com

Atributo:
interactions: {action: "CLICKED_PRODUCT_A"}
Clave de fila:
_key: user2@example.com



Atributos:
user: {id: "456", phone: "555-987-6543"}
activity: {action: "VIEWED_PRODUCT_B"}
Clave de fila estructurada:
phone: 555-987-6543
user_id: 456
email: user2@example.com

Atributo:
interactions: {action: "VIEWED_PRODUCT_B"}
Clave de fila:
_key: user3@example.com



Atributos:
user: {id: "1000", phone: "555-111-2222"}
activity: {action: "ADDED_TO_CART_PRODUCT_C"}
Clave de fila estructurada:
phone: 555-111-2222
user_id: 1000
email: user3@example.com

Atributo:
interactions: {action: "ADDED_TO_CART_PRODUCT_C"}

Limitaciones

  • Para leer la clave de salida, que es la clave del índice secundario asíncrono, solo puedes usar consultas en SQL.

¿Qué sigue?