O TairSearch é um sistema de busca em memória integral e tempo real que integra cache e computação. Seu mecanismo central de índice invertido suporta não apenas consultas de correspondência aproximada em radicais de palavras, mas também permite que o TairSearch funcione como um armazenamento de dados quentes. Essa integração entre computação e armazenamento acelera consultas de múltiplas colunas em qualquer número de campos.
Informações de contexto
Muitas aplicações armazenam dados essenciais em bancos de dados relacionais, como o MySQL. Para reduzir a carga do banco de dados e melhorar o desempenho, os desenvolvedores frequentemente adicionam um sistema de cache KV, como o Redis, para lidar com consultas de dados quentes. No entanto, quando um caso de uso exige consultas de múltiplas colunas ou consultas de correspondência aproximada com LIKE no banco de dados, um sistema de cache KV padrão não consegue atender a esses cenários sozinho. Isso requer mecanismos adicionais de filtragem e correspondência, como scripts Lua ou computação externa, para executar as consultas de múltiplas colunas.
Limitações dos sistemas de cache KV em cenários de consulta de múltiplas colunas
Ao importar dados de um banco de dados relacional para um sistema de cache KV como o Redis, você normalmente armazena cada linha em um Hash do Redis. A chave primária da linha torna-se a chave do hash no Redis, enquanto os nomes e valores das demais colunas tornam-se os campos e valores desse hash.
É possível recuperar diretamente campos específicos pela chave primária com o comando HMGET do Redis. Contudo, um banco de dados relacional pode ter não apenas uma chave primária, mas também vários índices secundários e diversos índices de múltiplas colunas para aumentar a eficiência das consultas. O Redis apresenta limitações significativas nos seguintes cenários:
Consulta por índice secundário: o Redis não suporta consultas a um hash pelos valores de seus campos. Portanto, é necessário criar um índice separado no Redis para mapear os valores do índice secundário de volta às chaves primárias. Essa solução aumenta a complexidade da importação de dados e desperdiça memória devido à redundância de informações.
Consulta de múltiplas colunas: o Redis não oferece suporte a consultas em um hash baseadas em vários valores de campos simultaneamente. Você precisa implementar essas consultas por conta própria, utilizando, por exemplo, scripts Lua ou lógica externa na aplicação.
Este tópico utiliza um serviço de busca de passagens aéreas durante um pico de tráfego como exemplo para demonstrar como o TairSearch acelera consultas de múltiplas colunas.
Para obter mais informações sobre o TairSearch e exemplos de comandos, consulte Busca.
Busca precisa de voos
Buscas por voos para destinos turísticos populares podem causar picos de tráfego durante feriados prolongados, como férias de verão, Dia Nacional e Festival da Primavera. Para lidar com esses aumentos de demanda, armazene todas as informações de voos futuros no TairSearch.
Etapa 1: Crie um índice de documentos
Em uma plataforma típica de reserva de voos, uma busca precisa envolve vários critérios principais: origem, destino, data da viagem, classe do assento e se o passageiro viaja com crianças ou bebês.
Neste exemplo, o nome do índice do TairSearch (departure_destination) é uma concatenação dos locais de origem e destino, por exemplo, zhuhai_hangzhou. Os seguintes campos de índice são criados: origem (departure), destino (destination), data (date), assento (seat), acompanhamento de crianças ou bebês (with), ID do voo (flight_id), preço (price), horário de partida (departure_time) e horário de chegada (destination_time).
Para adicionar ou modifique campos, execute o comando TFT.UPDATEINDEX.
Comando de exemplo:
TFT.CREATEINDEX zhuhai_hangzhou '{
"mappings":{
"properties":{
"departure":{"type":"keyword"},
"destination":{"type":"keyword"},
"date":{"type":"keyword"},
"seat":{"type":"keyword"},
"with":{"type":"keyword"},
"flight_id":{"type":"keyword"},
"price":{"type":"double"},
"departure_time":{"type":"long"},
"destination_time":{"type":"long"}
}
}
}'
Saída esperada:
OK
Etapa 2: Grave dados
Grave as informações do voo como um documento no índice do TairSearch. Veja abaixo um exemplo de comando:
TFT.ADDDOC zhuhai_hangzhou '{
"departure":"zhuhai",
"destination":"hangzhou",
"date":"2022-09-01",
"seat":"first",
"with":"baby",
"flight_id":"CZ1000",
"price":986.1,
"departure_time":1661991010,
"destination_time":1661998210
}'
Saída esperada:
"{"_id":"16615908912020060"}"
# Returns the ID of the new document.
Etapa 3: Busca precisa
Para buscar voos de primeira classe de Zhuhai para Hangzhou em 1º de setembro de 2022, ordenados pelo horário de partida, execute o seguinte comando:
TFT.Search zhuhai_hangzhou '{"sort":["departure_time"],"query":{"bool":{"must":[{"term":{"date":"2022-09-01"}},{"term":{"seat":"first"}}]}}}'
Saída esperada:
"{
"hits": {
"hits": [
{
"_id": "16615908912020060",
"_index": "zhuhai_hangzhou",
"_score": 0.433955,
"_source": {
"departure": "zhuhai",
"destination": "hangzhou",
"date": "2022-09-01",
"seat": "first",
"with": "baby",
"flight_id": "CZ1000",
"price": 986.1,
"departure_time": 1661991010,
"destination_time": 1661998210
}
}
],
"max_score": 0.433955,
"total": {
"relation": "eq",
"value": 1
}
}
}"