Criar um índice secundário assíncrono
É possível usar visualizações materializadas contínuas como índices secundários assíncronos para tabelas.
Antes de ler esta página, familiarize-se com as Visualizações materializadas contínuas.
Os dados em uma tabela do Bigtable geralmente são indexados por chaves de linha. No entanto, é possível criar uma visualização materializada contínua de uma tabela de origem e usá-la como um índice secundário assíncrono. Isso permite recuperar os mesmos dados usando diferentes padrões de pesquisa de consulta ao consultar a visualização materializada.
Um índice secundário assíncrono é uma visualização materializada contínua que contém um subconjunto de colunas de uma tabela de origem, além de uma chave de linha diferente da chave de linha na tabela de origem. Essas chaves de linha podem ser baseadas nas seguintes transformações, que permitem que seu aplicativo recupere os mesmos dados com base em diferentes padrões de pesquisa de consulta:
- Atributos na tabela de origem, como qualificadores de coluna, valores de coluna ou partes da chave de linha de origem.
- Uma reformatação da chave de linha.
- Uma transformação que combina a chave de linha com um atributo.
O Bigtable sincroniza automaticamente os índices secundários assíncronos com a tabela de origem de maneira eventualmente consistente.
Quando usar um índice secundário assíncrono
Muitas vezes, os aplicativos precisam consultar os mesmos dados usando diferentes padrões de pesquisa ou atributos. Por exemplo, considere um aplicativo que recupera informações do usuário pelo endereço de e-mail ou por um número de telefone. Talvez você queira o mesmo nível de performance nos dois padrões de consulta. Se você fizer do endereço de e-mail sua chave de linha do Bigtable e armazenar números de telefone em uma coluna, a performance da pesquisa de números de telefone será mais lenta porque exige uma verificação completa da tabela.
Para melhorar o desempenho da consulta ao pesquisar por um número de telefone, você pode criar uma visualização materializada contínua com uma instrução SQL. A instrução SQL orienta o Bigtable sobre como reestruturar seus dados com uma chave de linha diferente. Uma visualização materializada contínua funciona como uma tabela que pode ser consultada. Em seguida, use a visualização como um índice secundário assíncrono. Ele oferece ao aplicativo outro caminho de acesso aos mesmos dados. Cada caminho usa uma chave de linha diferente para que você possa escolher um caminho alternativo para cada consulta. Para escolher o melhor caminho para sua consulta, entenda a estrutura da chave de linha de cada tabela e os dados que cada uma armazena.
Usar uma visualização materializada contínua como um índice secundário assíncrono pode melhorar o desempenho da consulta nos seguintes casos de uso:
- Recriptografar seus dados: se você precisar consultar seus dados usando uma chave diferente das chaves de linha da tabela de origem, crie uma visualização materializada contínua com a chave alternativa e consulte essa visualização.
- Filtrar dados: se você quiser filtrar a tabela de origem e preencher apenas linhas específicas de dados no índice secundário assíncrono, forneça uma cláusula
WHERE
na consulta SQL que define a visualização. - Chaves de atributo: se você precisar consultar seus dados com base em um atributo que não seja chave, como um qualificador ou valor de coluna, inclua-o na cláusula
ORDER BY
.
Sobre índices secundários assíncronos
Para usar uma visualização materializada contínua no Bigtable como um índice secundário assíncrono, considere os seguintes requisitos:
- A chave de linha de um novo índice secundário assíncrono precisa incluir a chave de linha da tabela de origem para ajudar a garantir um mapeamento de um para um entre as linhas da tabela de origem e as linhas do índice secundário assíncrono da visualização materializada contínua.
- O índice secundário assíncrono não precisa ter o mesmo esquema ou
atributos da tabela de origem. Na parte
SELECT
da consulta SQL, especifique quais colunas da tabela são necessárias e as transformações SQL dos dados que você quer aplicar. - O índice secundário assíncrono só precisa copiar os dados necessários para o padrão de consulta. Não é necessário fornecer todos os dados na tabela de origem.
- No Bigtable, a chave de linha escolhida fornece a ordem de classificação padrão.
Para consultar índices secundários assíncronos, considere os seguintes requisitos:
- Todas as colunas na cláusula
ORDER BY
também precisam ser incluídas na cláusulaSELECT
. - Depois de definir o índice secundário assíncrono, o aplicativo precisa conseguir escolher entre consultar a tabela de origem ou a visualização materializada que representa o índice secundário assíncrono.
- Os aplicativos não gravam diretamente no índice, que é sincronizado continuamente com a tabela de origem. Sempre grave na tabela de origem.
- O índice secundário assíncrono é eventualmente consistente. Os dados são gravados primeiro na tabela de origem e depois transformados no formato do índice secundário assíncrono.
- Recomendamos que você crie um índice de cobertura. Para mais informações, consulte a seção Índices de cobertura deste documento.
- A cláusula
ORDER BY
precisa conter a chave de linha não modificada da tabela de origem, e todos os dados precisam ser classificados em ordem crescente. A chave de linha na tabela de origem é sempre projetada para a visualização materializada, mas pode ser combinada com outros atributos. - As colunas na cláusula
ORDER BY
se tornam parte da chave de linha estruturada do índice secundário assíncrono. Todas as outras colunas selecionadas se tornam valores de coluna não chave no índice secundário assíncrono. Se você converter um valor na cláusulaORDER BY
em um tipo de dados específico do GoogleSQL para Bigtable, ele vai manter 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 necessárias para suas consultas. Ao consultar um índice de cobertura, o Bigtable pode recuperar todos os dados necessários diretamente do índice, sem precisar acessar a tabela de origem. Recomendamos essa abordagem para um desempenho ideal porque ela minimiza o número de leituras de disco. Para criar um índice de cobertura, verifique se a instrução SELECT
especifica todas as colunas necessárias nas consultas.
Quando quiser criar um índice não abrangente, consulte o índice e use os resultados para pesquisar as colunas adicionais necessárias na tabela de origem.
Definir um índice secundário assíncrono
Para criar um índice secundário assíncrono, crie uma visualização materializada contínua com uma consulta SQL que define o índice secundário assíncrono.
No exemplo a seguir, a consulta SQL cria um índice secundário assíncrono que
permite consultar dados de interações do usuário. 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, ID do usuário e endereço de e-mail do usuário. Ele também atribui o nome interactions
ao grupo 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 a seguir explica como o índice é criado comparando a visualização 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ó é possível usar consultas SQL.
A seguir
- Consultas assíncronas de índice secundário
- Consultas contínuas de visualizações materializadas
- Criar e gerenciar visualizações materializadas contínuas
- Práticas recomendadas de criação de esquema
- Gerenciar esquemas de chave de linha
- Contagem distribuída no Bigtable