Nos últimos seis meses, a equipe de engenharia da Rockset integrou totalmente os índices de similaridade em seu banco de dados de pesquisa e análise.
A indexação sempre esteve na vanguarda da tecnologia da Rockset. A Rockset construiu um Índice Convergente que inclui elementos de um índice de pesquisa, armazenamento em colunas, armazenamento em linhas e agora um índice de similaridade que pode ser dimensionado para bilhões de vetores e terabytes de dados. Nós arquitetamos esses índices para suportar atualizações em tempo actual para que os dados de streaming possam ser disponibilizados para pesquisa em menos de 200 milissegundos.
No início deste ano, a Rockset introduziu uma nova arquitetura de nuvem com computação-armazenamento e separação computação-computação. Como resultado, a indexação de vetores e metadados recém-ingeridos não afeta negativamente o desempenho da pesquisa. Os usuários podem transmitir e indexar vetores continuamente, totalmente isolados da pesquisa. Essa arquitetura é vantajosa para transmissão de dados e também indexação de similaridade, pois essas são operações que exigem muitos recursos.
O que também notamos é que a pesquisa vetorial não está em uma ilha própria. Muitos aplicativos aplicam filtros à pesquisa vetorial usando texto, geo, dados de séries temporais e muito mais. O Rockset torna a pesquisa híbrida tão fácil quanto uma cláusula SQL WHERE. O Rockset explorou o poder do índice de pesquisa com um mecanismo SQL integrado para que suas consultas sejam sempre executadas com eficiência.
Neste weblog, veremos como a Rockset integrou totalmente pesquisa vetorial em seu banco de dados de pesquisa e análise. Descreveremos como a Rockset arquitetou sua solução para SQL nativo, atualizações em tempo actual e separação entre computação.
Assista à palestra sobre tecnologia em Como construímos a pesquisa vetorial na nuvem com o arquiteto chefe Tudor Bosman e o engenheiro Daniel Latta-Lin. Ouça como eles construíram um índice de similaridade distribuído usando FAISS-IVF que é eficiente em termos de memória e suporta inserção e recuperação imediatas.
FAISS-IVF na Rockset
Embora o Rockset seja agnóstico em termos de algoritmo na implementação de indexação de similaridade, para a implementação inicial, aproveitamos FAISS-FIV pois é amplamente utilizado, bem documentado e suporta atualizações.
Existem vários métodos para indexação de vetores incluindo a construção de um gráfico, estrutura de dados em árvore e estrutura de arquivo invertida. Estruturas de árvore e gráfico levam mais tempo para serem construídas, tornando-as computacionalmente caras e demoradas para dar suporte a casos de uso com vetores de atualização frequente. A abordagem de arquivo invertido é muito apreciada por causa de seu rápido tempo de indexação e desempenho de pesquisa.
Enquanto o Biblioteca FAISS é de código aberto e pode ser aproveitado como um índice autônomo, os usuários precisam de um banco de dados para gerenciar e dimensionar a pesquisa vetorial. É aí que o Rockset entra porque ele resolveu desafios de banco de dados, incluindo otimização de consulta, multilocação, fragmentação, consistência e muito mais que os usuários precisam ao dimensionar aplicativos de pesquisa vetorial.
Implementação do FAISS-IVF na Rockset
Como o Rockset foi projetado para escala, ele cria um índice de similaridade FAISS distribuído que é eficiente em termos de memória e oferece suporte para inserção e recuperação imediatas.
Usando um Comando DDLum usuário cria um índice de similaridade em qualquer campo vetorial em uma coleção Rockset. Sob o capô, o algoritmo de indexação de arquivo invertido particiona o espaço vetorial em Células de Voronoi e atribui a cada partição um centroide, ou o ponto que cai no centro da partição. Os vetores são então atribuídos a uma partição, ou célula, com base em qual centroide eles estão mais próximos.
CREATE SIMILARITY INDEX vg_ann_index
ON FIELD confluent_webinar.video_game_embeddings:embedding
DIMENSION 1536 as 'faiss::IVF256,Flat';
Um exemplo do comando DDL usado para criar um índice de similaridade no Rockset.

No momento da criação do índice de similaridade, o Rockset cria uma lista de postagem dos centroides e seus identificadores que é armazenada na memória. Cada registro na coleção também é indexado e campos adicionais são adicionados a cada registro para armazenar o centroide mais próximo e o residual, o deslocamento ou a distância do centroide mais próximo. A coleção é armazenada em SSDs para desempenho e armazenamento de objetos em nuvem para durabilidade, oferecendo melhor desempenho de preço do que soluções de banco de dados vetoriais na memória. À medida que novos registros são adicionados, seus centroides e residuais mais próximos são computados e armazenados.

Com Rockset’s Índice Convergentea busca vetorial pode alavancar tanto a similaridade quanto o índice de busca em paralelo. Ao executar uma busca, o otimizador de consultas do Rockset obtém os centroides mais próximos do embedding alvo do FAISS. O otimizador de consultas do Rockset então pesquisa nos centroides usando o índice de busca para retornar o resultado.
O Rockset também dá flexibilidade ao usuário para negociar entre recall e velocidade para sua aplicação de IA. No momento da criação do índice de similaridade, o usuário pode determinar o número de centróidescom mais centroides levando a uma busca mais rápida, mas também a um tempo de indexação maior. No momento da consulta, o usuário também pode selecionar o número de sondas, ou o número de células para pesquisar, negociando entre velocidade e precisão da pesquisa.
A implementação do Rockset minimiza a quantidade de dados armazenados na memória, limitando-os a uma lista de postagens, e aproveita o índice de similaridade e o índice de pesquisa para melhor desempenho.
Crie aplicativos com atualizações em tempo actual
Um dos conhecidos desafios difíceis com pesquisa de vetor está lidando com inserções, atualizações e exclusões. Isso porque os índices de vetor são cuidadosamente organizados para pesquisas rápidas e qualquer tentativa de atualizá-los com novos vetores deteriorará rapidamente as propriedades de pesquisa rápida.
O Rockset suporta atualizações de streaming para metadados e vetores de forma eficiente. O Rockset é construído em Banco de dados de rochasum mecanismo de armazenamento incorporado de código aberto projetado para mutabilidade e construído pela equipe por trás do Rockset na Meta.
Usar o RocksDB por baixo dos panos permite que o Rockset suporte mutações em nível de campo, então uma atualização do vetor em um registro particular person acionará uma consulta ao FAISS para gerar o novo centroide e resíduo. O Rockset atualizará então apenas os valores do centroide e do resíduo para um campo de vetor atualizado. Isso garante que vetores novos ou atualizados sejam consultáveis em ~200 milissegundos.
Separação de indexação e pesquisa
Conjunto de foguetes separação de computação-computação garante que o streaming e a indexação contínuos de vetores não afetarão o desempenho da pesquisa. Na arquitetura do Rockset, uma instância digital, cluster de nós de computação, pode ser usada para ingerir e indexar dados enquanto outras instâncias virtuais podem ser usadas para consultas. Várias instâncias virtuais podem acessar simultaneamente o mesmo conjunto de dados, eliminando a necessidade de várias réplicas de dados.
A separação entre computação torna possível que o Rockset suporte indexação e pesquisa simultâneas. muitos outros bancos de dados vetoriaisvocê não pode executar leituras e gravações em paralelo, então você é forçado a carregar dados em lote fora do horário comercial para garantir o desempenho de pesquisa consistente do seu aplicativo.
A separação entre cálculos também garante que, quando os índices de similaridade precisam ser periodicamente retreinados para manter o recall alto, não haja interferência no desempenho da pesquisa. É bem sabido que o retreinamento periódico do índice pode ser computacionalmente caro. Em muitos sistemas, incluindo em Pesquisa elásticaas operações de reindexação e busca acontecem no mesmo cluster. Isso introduz o potencial para a indexação interferir negativamente no desempenho de busca do aplicativo.
Com a separação entre cálculos, a Rockset evita o problema de indexação impactando a pesquisa para desempenho previsível em qualquer escala.
Pesquisa híbrida tão fácil quanto uma cláusula SQL WHERE
Muitos bancos de dados vetoriais oferecem suporte limitado para pesquisa híbrida ou filtragem de metadados e restringem os tipos de campos, atualizações de metadados e o tamanho dos metadados. Sendo construído para pesquisa e análise, o Rockset trata os metadados como um cidadão de primeira classe e suporta documentos de até 40 MB de tamanho.
A razão pela qual muitos novos bancos de dados de vetores limitam os metadados é que filtrar dados incrivelmente rápido é um problema muito difícil. Se você recebesse a consulta, “Dê-me 5 vizinhos mais próximos onde
?” você precisaria ser capaz de pesar os diferentes filtros, sua seletividade e então reordenar, planejar e otimizar a busca. Esse é um problema muito difícil, mas um que bancos de dados de busca e análise, como o Rockset, gastaram muito tempo, anos até, resolvendo com um otimizador baseado em custo.
Como usuário, você pode sinalizar ao Rockset que está aberto a uma pesquisa aproximada do vizinho mais próximo e a negociar alguma precisão pela velocidade na consulta de pesquisa usando approx_dot_product
ou approx_euclidean_dist
.
WITH dune_embedding AS (
SELECT embedding
FROM commons.book_catalogue_embeddings catalogue
WHERE title="Dune"
LIMIT 1
)
SELECT title, creator, ranking, num_ratings, worth,
APPROX_DOT_PRODUCT(dune_embedding.embedding, book_catalogue_embeddings.embedding) similarity,
description, language, book_format, page_count, liked_percent
FROM commons.book_catalogue_embeddings CROSS JOIN dune_embedding
WHERE ranking IS NOT NULL
AND book_catalogue_embeddings.embedding IS NOT NULL
AND creator != 'Frank Herbert'
AND ranking > 4.0
ORDER BY similarity DESC
LIMIT 30
Uma consulta com approx_dot_product
que é uma medida aproximada de quão próximos dois vetores se alinham.
O Rockset usa o índice de pesquisa para filtrar por metadados e restringir a pesquisa aos centroides mais próximos. Essa técnica é chamada de filtragem de estágio único e contrasta com a filtragem de duas etapas, incluindo pré-filtragem e pós-filtragem, que podem induzir latência.
Pesquisa de vetores de escala na nuvem
Na Rockset, passamos anos construindo um banco de dados de pesquisa e análise para escala. Ele foi projetado do zero para a nuvem com isolamento de recursos que é essential ao construir aplicativos em tempo actual ou aplicativos que rodam 24×7. Em cargas de trabalho do cliente, a Rockset escalou para 20.000 QPS mantendo uma latência de dados P50 de 10 milissegundos.
Como resultado, vemos empresas já usando a pesquisa vetorial para aplicações de produção em escala. JetBluelíder em dados no setor de companhias aéreas, usa o Rockset como seu banco de dados de pesquisa vetorial para tomar decisões operacionais sobre voos, tripulação e passageiros usando chatbots baseados em LLM. O que nãoo mercado de crescimento mais rápido nos EUA, usa o Rockset para fornecer recomendações de IA em sua plataforma de leilão ao vivo.
Se você está construindo um aplicativo de IA, convidamos você a começar um teste gratuito da Rockset ou saiba mais sobre nossa tecnologia para seu caso de uso em um demonstração do produto.
Assista à palestra sobre tecnologia em Como construímos a pesquisa vetorial na nuvem com o arquiteto chefe Tudor Bosman e o engenheiro Daniel Latta-Lin. Ouça como eles construíram um índice de similaridade distribuído usando FAISS-IVF que é eficiente em termos de memória e suporta inserção e recuperação imediatas.