Crie um índice secundário assíncrono
Pode usar vistas materializadas contínuas como índices secundários assíncronos para tabelas.
Antes de ler esta página, familiarize-se com as vistas materializadas contínuas.
Normalmente, os dados numa tabela do Bigtable são indexados por chaves de linhas. No entanto, pode criar uma vista materializada contínua a partir de uma tabela de origem e usá-la como um índice secundário assíncrono. Isto permite-lhe obter os mesmos dados através de diferentes padrões de pesquisa de consultas, consultando a vista materializada.
Um índice secundário assíncrono é uma vista materializada contínua que contém um subconjunto de colunas de uma tabela de origem, juntamente com uma chave de linha diferente da chave de linha na tabela de origem. Estas chaves de linhas podem basear-se nas seguintes transformações que permitem à sua aplicação obter os mesmos dados com base em diferentes padrões de pesquisa de consultas:
- Atributos na tabela de origem, como qualificadores de colunas, valores de colunas ou partes da chave da linha de origem.
- Uma reformatação da chave da linha.
- Uma transformação que combina a chave da linha com um atributo.
O Bigtable sincroniza automaticamente os índices secundários assíncronos com a tabela de origem de uma forma eventualmente consistente.
Quando usar um índice secundário assíncrono
As aplicações precisam frequentemente de consultar os mesmos dados usando diferentes padrões de pesquisa ou atributos. Por exemplo, considere uma aplicação que obtenha informações do utilizador através do endereço de email ou de um número de telefone. Pode querer o mesmo nível de desempenho em ambos os padrões de consulta. Se fizer do endereço de email a chave da linha do Bigtable e armazenar números de telefone numa coluna, o desempenho da pesquisa de números de telefone é mais lento porque requer uma análise completa da tabela.
Para melhorar o desempenho das consultas quando procura por um número de telefone, pode criar uma vista materializada contínua com uma declaração SQL. A declaração SQL indica ao Bigtable como reestruturar os seus dados com uma chave de linha diferente. Uma vista materializada contínua funciona como uma tabela que pode consultar. Em seguida, usa a vista como um índice secundário assíncrono. Dá à sua aplicação outro caminho de acesso aos mesmos dados. Cada caminho usa uma chave de linha diferente para que possa escolher um caminho alternativo para cada consulta. Para escolher o melhor caminho para a sua consulta, compreenda a estrutura da chave da linha para cada tabela e os dados que cada tabela armazena.
A utilização de uma vista materializada contínua como um índice secundário assíncrono pode melhorar o desempenho das consultas nos seguintes exemplos de utilização:
- Voltar a introduzir as chaves dos dados: se precisar de consultar os dados através de uma chave diferente das chaves das linhas da tabela de origem, pode criar uma vista materializada contínua com a chave alternativa e consultar essa vista.
- Filtrar dados: se quiser filtrar a tabela de origem e preencher apenas linhas de dados específicas no índice secundário assíncrono, forneça uma cláusula
WHERE
na consulta SQL que define a vista. - Chaves de atributos: se precisar de consultar os seus dados com base num atributo que não seja uma chave, como um qualificador ou um valor de coluna, pode incluí-lo na cláusula
ORDER BY
.
Acerca dos índices secundários assíncronos
Para usar uma vista materializada contínua no Bigtable como um índice secundário assíncrono, considere os seguintes requisitos:
- A chave da linha de um novo índice secundário assíncrono tem de incluir a chave da linha da tabela de origem para ajudar a garantir um mapeamento individual entre as linhas na tabela de origem e as linhas no índice secundário assíncrono da vista materializada contínua.
- O índice secundário assíncrono não tem de ter o mesmo esquema nem os mesmos atributos que a tabela de origem. Na parte
SELECT
da consulta SQL, tem de especificar as colunas da tabela necessárias e as transformações SQL dos dados que quer aplicar. - O índice secundário assíncrono só precisa de copiar os dados necessários para o padrão de consulta. Não é necessário fornecer todos os dados de origem na tabela de origem.
- No Bigtable, a chave de linha que escolher fornece a ordem de ordenação predefinida.
Para consultar índices secundários assíncronos, considere os seguintes requisitos:
- Todas as colunas na cláusula
ORDER BY
também têm de ser incluídas na cláusulaSELECT
. - Depois de definir o índice secundário assíncrono, a sua aplicação tem de poder escolher entre consultar a tabela de origem ou a vista materializada que representa o índice secundário assíncrono.
- As aplicações não escrevem diretamente no índice, que é sincronizado continuamente com a tabela de origem. Escrever sempre na tabela de origem.
- O índice secundário assíncrono é eventualmente consistente. Os dados são escritos primeiro na tabela de origem e, em seguida, transformados no formato do índice secundário assíncrono.
- Recomendamos que crie um índice de cobertura. Para mais informações, consulte a secção Índices de cobertura deste documento.
- A cláusula
ORDER BY
tem de conter a chave de linha não modificada da tabela de origem e todos os dados têm de ser ordenados por ordem ascendente. A chave da linha na tabela de origem é sempre projetada para a vista materializada. No entanto, pode ser combinada com outros atributos. - As colunas na cláusula
ORDER BY
tornam-se parte da chave de linha estruturada do índice secundário assíncrono. Todas as outras colunas selecionadas tornam-se valores de colunas não principais no índice secundário assíncrono. Se converter um valor na cláusulaORDER BY
num tipo de dados específico do GoogleSQL para Bigtable, este mantém o tipo de dados na chave de linha estruturada do índice secundário assíncrono.
Índices de cobertura
Um índice de cobertura inclui todas as colunas de que as suas consultas precisam. Quando consulta um índice de cobertura, o Bigtable pode obter todos os dados necessários diretamente do índice, sem ter de aceder à tabela de origem. Recomendamos esta abordagem para um desempenho ideal, uma vez que minimiza o número de leituras do disco. Para criar um índice de cobertura, certifique-se de que a declaração SELECT
especifica todas as colunas de que precisa nas suas consultas.
Quando quiser criar um índice não abrangente, consulte o índice e, em seguida, use os resultados para procurar as colunas adicionais de que precisa na tabela de origem.
Defina um índice secundário assíncrono
Crie um índice secundário assíncrono através da criação de uma vista materializada contínua com uma consulta SQL que define o índice secundário assíncrono.
No exemplo seguinte, a consulta SQL cria um índice secundário assíncrono que lhe permite consultar dados de interações dos utilizadores. A cláusula ORDER BY
define a chave de linha estruturada do índice secundário assíncrono, usando uma combinação do número de telefone, do ID do utilizador e do endereço de email do utilizador. Também atribui o nome interactions
à família de colunas 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;
A tabela seguinte explica como o índice é criado comparando a vista da mesma linha na tabela de origem com o índice secundário assíncrono correspondente:
Linha da tabela de origem | Linha de índice secundário assíncrono |
---|---|
Chave da linha: _key : user1@example.com Atributos: user : {id: "123", phone: "555-123-4567"} activity : {action: "CLICKED_PRODUCT_A"} |
Chave de linha estruturada: phone : 555-123-4567 user_id : 123 email : user1@example.com Atributo: interactions : {action: "CLICKED_PRODUCT_A"} |
Chave da linha: _key : user2@example.com Atributos: user : {id: "456", phone: "555-987-6543"} activity : {action: "VIEWED_PRODUCT_B"} |
Chave de linha estruturada: phone : 555-987-6543 user_id : 456 email : user2@example.com Atributo: interactions : {action: "VIEWED_PRODUCT_B"} |
Chave da linha: _key : user3@example.com Atributos: user : {id: "1000", phone: "555-111-2222"} activity : {action: "ADDED_TO_CART_PRODUCT_C"} |
Chave de linha estruturada: phone : 555-111-2222 user_id : 1000 email : user3@example.com Atributo: interactions : {action: "ADDED_TO_CART_PRODUCT_C"} |
Limitações
- Para ler a chave de saída, que é a chave do índice secundário assíncrono, só pode usar consultas SQL.
O que se segue?
- Consultas de índice secundário assíncronas
- Consultas de vistas materializadas contínuas
- Crie e faça a gestão de vistas materializadas contínuas
- Práticas recomendadas de criação de esquemas
- Faça a gestão dos esquemas de chaves de linhas
- Contagem distribuída no Bigtable