Introdução
Na era dos grandes volumes de dados, que tecnologias e aplicações de bases de dados serão mais importantes? Qual será o próximo fator de mudança?
Com os dados não estruturados a representarem cerca de 80-90% de todos os dados armazenados, o que é suposto fazermos com estes lagos de dados em crescimento? Poder-se-ia pensar em utilizar os métodos analíticos tradicionais, mas estes não conseguem extrair informações úteis, se é que as têm. Para responder a esta pergunta, os "Três Mosqueteiros" da equipa de Investigação e Desenvolvimento da Zilliz, o Dr. Rentong Guo, o Sr. Xiaofan Luan e o Dr. Xiaomeng Yi, são co-autores de um artigo que discute a conceção e os desafios enfrentados na construção de um sistema de base de dados vetorial de uso geral.
Este artigo foi incluído na Programmer, uma revista produzida pela CSDN, a maior comunidade de programadores de software da China. Esta edição da Programmer também inclui artigos de Jeffrey Ullman, vencedor do Prémio Turing 2020, Yann LeCun, vencedor do Prémio Turing 2018, Mark Porter, CTO da MongoDB, Zhenkun Yang, fundador da OceanBase, Dongxu Huang, fundador da PingCAP, etc.
Abaixo, compartilhamos o artigo completo com você:
Introdução
As aplicações de dados actuais podem lidar facilmente com dados estruturados, que representam cerca de 20% dos dados actuais. Na sua caixa de ferramentas encontram-se sistemas como as bases de dados relacionais, as bases de dados NoSQL, etc. Em contrapartida, os dados não estruturados, que representam cerca de 80% de todos os dados, não dispõem de sistemas fiáveis. Para resolver este problema, este artigo abordará os pontos problemáticos que a análise de dados tradicional tem com os dados não estruturados e discutirá ainda a arquitetura e os desafios que enfrentámos ao criar o nosso próprio sistema de base de dados vetorial de uso geral.
Revolução dos dados na era da IA
Com o rápido desenvolvimento das tecnologias 5G e IoT, as indústrias procuram multiplicar os seus canais de recolha de dados e projetar ainda mais o mundo real no espaço digital. Embora tenha trazido alguns desafios tremendos, também trouxe consigo enormes benefícios para a indústria em crescimento. Um desses desafios difíceis é a forma de obter informações mais aprofundadas sobre estes novos dados recebidos.
De acordo com as estatísticas da IDC, só em 2020 foram gerados mais de 40 000 exabytes de novos dados a nível mundial. Do total, apenas 20% são dados estruturados - dados altamente ordenados e fáceis de organizar e analisar através de cálculos numéricos e álgebra relacional. Em contrapartida, os dados não estruturados (que representam os restantes 80%) são extremamente ricos em variações de tipos de dados, o que dificulta a descoberta da semântica profunda através dos métodos tradicionais de análise de dados.
Felizmente, estamos a assistir a uma evolução rápida e simultânea dos dados não estruturados e da IA, com a IA a permitir-nos compreender melhor os dados através de vários tipos de redes neuronais, como se mostra na Figura 1.
newdata1.jpeg
A tecnologia de incorporação ganhou rapidamente popularidade após a estreia do Word2vec, com a ideia de "incorporar tudo" a chegar a todos os sectores da aprendizagem automática. Isto leva ao aparecimento de duas grandes camadas de dados: a camada de dados em bruto e a camada de dados vectoriais. A camada de dados brutos é composta por dados não estruturados e por certos tipos de dados estruturados; a camada de vectores é a coleção de dados incorporados facilmente analisáveis que têm origem na camada de dados brutos e que passam por modelos de aprendizagem automática.
Quando comparados com os dados em bruto, os dados vectorizados apresentam as seguintes vantagens:
- Os vectores de incorporação são um tipo abstrato de dados, o que significa que podemos construir um sistema de álgebra unificado dedicado a reduzir a complexidade dos dados não estruturados.
- Os vectores de incorporação são expressos através de vectores de vírgula flutuante densos, permitindo que as aplicações tirem partido do SIMD. Com o SIMD a ser suportado por GPUs e quase todas as CPUs modernas, os cálculos entre vectores podem atingir um elevado desempenho a um custo relativamente baixo.
- Os dados vectoriais codificados através de modelos de aprendizagem automática ocupam menos espaço de armazenamento do que os dados originais não estruturados, permitindo um maior rendimento.
- A aritmética também pode ser efectuada através de vectores de incorporação. A Figura 2 mostra um exemplo de correspondência aproximada semântica transmodal - as imagens apresentadas na figura são o resultado da correspondência de palavras incorporadas com imagens incorporadas.
novosdados2.png
Como se mostra na Figura 3, a combinação da semântica de imagens e palavras pode ser feita com uma simples adição e subtração de vectores através dos seus correspondentes encaixes.
newdata3.png
Para além das caraterísticas acima referidas, estes operadores suportam declarações de consulta mais complicadas em cenários práticos. A recomendação de conteúdos é um exemplo bem conhecido. Geralmente, o sistema incorpora tanto o conteúdo como as preferências de visualização dos utilizadores. Em seguida, o sistema faz corresponder as preferências do utilizador incorporadas com o conteúdo incorporado mais semelhante através da análise de semelhança semântica, resultando num novo conteúdo que é semelhante às preferências dos utilizadores. Esta camada de dados vectoriais não se limita apenas aos sistemas de recomendação, os casos de utilização incluem o comércio eletrónico, a análise de malware, a análise de dados, a verificação biométrica, a análise de fórmulas químicas, as finanças, os seguros, etc.
Os dados não estruturados requerem uma pilha de software de base completa
O software de sistema está na base de todas as aplicações orientadas para os dados, mas o software de sistema de dados criado ao longo das últimas décadas, por exemplo, bases de dados, motores de análise de dados, etc., destina-se a lidar com dados estruturados. As aplicações de dados modernas baseiam-se quase exclusivamente em dados não estruturados e não beneficiam dos sistemas tradicionais de gestão de bases de dados.
Para resolver este problema, desenvolvemos um sistema de base de dados vetorial de uso geral orientado para a IA, denominado Milvus (Referência n.º 1~2). Em comparação com os sistemas de bases de dados tradicionais, o Milvus trabalha numa camada de dados diferente. As bases de dados tradicionais, como as bases de dados relacionais, as bases de dados KV, as bases de dados de texto, as bases de dados de imagens/vídeo, etc., funcionam na camada de dados brutos, enquanto o Milvus funciona na camada de dados vectoriais.
Nos capítulos seguintes, discutiremos as novas caraterísticas, a conceção arquitetónica e os desafios técnicos que enfrentámos ao construir o Milvus.
Principais atributos das bases de dados vectoriais
As bases de dados vectoriais armazenam, recuperam e analisam vectores e, tal como qualquer outra base de dados, também fornecem uma interface normalizada para operações CRUD. Para além destas caraterísticas "normais", os atributos enumerados abaixo são também qualidades importantes para uma base de dados vetorial:
- Suporte para operadores vectoriais de elevada eficiência
O suporte de operadores vectoriais num motor de análise centra-se em dois níveis. Em primeiro lugar, a base de dados vetorial deve suportar diferentes tipos de operadores, por exemplo, a correspondência de semelhanças semânticas e a aritmética semântica acima mencionadas. Para além disso, deve suportar uma variedade de métricas de semelhança para os cálculos de semelhança subjacentes. Essa semelhança é geralmente quantificada como distância espacial entre vectores, sendo as métricas comuns a distância euclidiana, a distância cosseno e a distância do produto interno.
- Apoio à indexação de vectores
Em comparação com os índices baseados em árvores B ou LSM nas bases de dados tradicionais, os índices vectoriais de alta dimensão consomem normalmente muito mais recursos informáticos. Recomendamos a utilização de algoritmos de clustering e de índice gráfico, dando prioridade a operações matriciais e vectoriais, tirando assim o máximo partido das capacidades de aceleração do cálculo vetorial por hardware anteriormente mencionadas.
- Experiência de utilizador consistente em diferentes ambientes de implementação
As bases de dados vectoriais são normalmente desenvolvidas e implementadas em diferentes ambientes. Na fase preliminar, os cientistas de dados e os engenheiros de algoritmos trabalham sobretudo nos seus computadores portáteis e estações de trabalho, pois prestam mais atenção à eficiência da verificação e à velocidade de iteração. Quando a verificação estiver concluída, podem implementar a base de dados completa num cluster privado ou na nuvem. Por conseguinte, um sistema de base de dados vetorial qualificado deve proporcionar um desempenho consistente e uma experiência de utilizador em diferentes ambientes de implementação.
- Suporte para pesquisa híbrida
Estão a surgir novas aplicações à medida que as bases de dados vectoriais se tornam omnipresentes. Entre todas estas exigências, a mais frequentemente mencionada é a pesquisa híbrida em vectores e outros tipos de dados. Alguns exemplos disto são a pesquisa aproximada do vizinho mais próximo (ANNS) após filtragem escalar, a recuperação multicanal da pesquisa de texto integral e da pesquisa vetorial e a pesquisa híbrida de dados espácio-temporais e dados vectoriais. Estes desafios exigem escalabilidade elástica e otimização de consultas para fundir eficazmente os motores de pesquisa vetorial com KV, texto e outros motores de pesquisa.
- Arquitetura nativa da nuvem
O volume de dados vectoriais aumenta com o crescimento exponencial da recolha de dados. Os dados vectoriais de elevada dimensão e à escala de um bilião correspondem a milhares de TB de armazenamento, o que ultrapassa largamente o limite de um único nó. Consequentemente, a extensibilidade horizontal é uma capacidade fundamental para uma base de dados vetorial e deve satisfazer as exigências dos utilizadores em termos de elasticidade e agilidade de implantação. Além disso, deve também reduzir a complexidade da operação e da manutenção do sistema, melhorando simultaneamente a observabilidade com a ajuda da infraestrutura de computação em nuvem. Algumas destas necessidades assumem a forma de isolamento multi-tenant, instantâneo e cópia de segurança de dados, encriptação de dados e visualização de dados, que são comuns nas bases de dados tradicionais.
Arquitetura do sistema de base de dados vetorial
O Milvus 2.0 segue os princípios de conceção de "registo como dados", "processamento unificado em lote e em fluxo", "sem estado" e "micro-serviços". A figura 4 mostra a arquitetura geral do Milvus 2.0.
newdata4.png
Registo como dados: O Milvus 2.0 não mantém quaisquer tabelas físicas. Em vez disso, garante a fiabilidade dos dados através da persistência de registos e de instantâneos de registos. O corretor de logs (a espinha dorsal do sistema) armazena logs e desacopla componentes e serviços através do mecanismo de publicação-assinatura de logs (pub-sub). Como mostra a Figura 5, o corretor de registos é composto pela "sequência de registos" e pelo "assinante de registos". A sequência de registos regista todas as operações que alteram o estado de uma coleção (equivalente a uma tabela numa base de dados relacional); o assinante de registos subscreve a sequência de registos para atualizar os seus dados locais e fornecer serviços sob a forma de cópias só de leitura. O mecanismo pub-sub também abre espaço para a extensibilidade do sistema em termos de captura de dados alterados (CDC) e implantação globalmente distribuída.
newdata5.png
Processamento unificado em lote e em fluxo: O streaming de registos permite ao Milvus atualizar os dados em tempo real, garantindo assim a capacidade de entrega em tempo real. Além disso, ao transformar lotes de dados em instantâneos de registo e ao criar índices em instantâneos, o Milvus consegue obter uma maior eficiência de consulta. Durante uma consulta, Milvus funde os resultados da consulta de dados incrementais e dados históricos para garantir a integralidade dos dados retornados. Esta conceção equilibra melhor o desempenho e a eficiência em tempo real, aliviando a carga de manutenção dos sistemas online e offline em comparação com a arquitetura Lambda tradicional.
Sem estado: A infraestrutura de nuvem e os componentes de armazenamento de código aberto libertam o Milvus da persistência de dados nos seus próprios componentes. O Milvus 2.0 persiste os dados com três tipos de armazenamento: armazenamento de metadados, armazenamento de registos e armazenamento de objectos. O armazenamento de metadados não apenas armazena os metadados, mas também lida com a descoberta de serviços e o gerenciamento de nós. O armazenamento de registos executa a persistência incremental de dados e a publicação-assinatura de dados. O armazenamento de objectos armazena instantâneos de registos, índices e alguns resultados de cálculos intermédios.
Microsserviços: O Milvus segue os princípios de desagregação do plano de dados e do plano de controlo, separação de leitura/escrita e separação de tarefas online/offline. É composto por quatro camadas de serviço: a camada de acesso, a camada de coordenação, a camada de trabalho e a camada de armazenamento. Estas camadas são mutuamente independentes quando se trata de escalonamento e recuperação de desastres. Como camada frontal e ponto final do utilizador, a camada de acesso trata das ligações dos clientes, valida os pedidos dos clientes e combina os resultados das consultas. Como "cérebro" do sistema, a camada de coordenação assume as tarefas de gestão da topologia do cluster, equilíbrio de carga, declaração de dados e gestão de dados. A camada de trabalho contém os "membros" do sistema, executando actualizações de dados, consultas e operações de criação de índices. Finalmente, a camada de armazenamento é responsável pela persistência e replicação dos dados. Globalmente, esta conceção baseada em microsserviços garante uma complexidade controlável do sistema, sendo cada componente responsável pela sua função correspondente. O Milvus clarifica as fronteiras dos serviços através de interfaces bem definidas e separa os serviços com base numa granularidade mais fina, o que optimiza ainda mais a escalabilidade elástica e a distribuição de recursos.
Desafios técnicos enfrentados pelas bases de dados vectoriais
A investigação inicial sobre bases de dados vectoriais concentrou-se principalmente na conceção de estruturas de índices e métodos de consulta de elevada eficiência, o que deu origem a uma variedade de bibliotecas de algoritmos de pesquisa vetorial (Referência n.º 3~5). Nos últimos anos, um número crescente de equipas académicas e de engenharia analisaram os problemas da pesquisa vetorial do ponto de vista da conceção do sistema e propuseram algumas soluções sistemáticas. Resumindo os estudos existentes e a procura dos utilizadores, classificamos os principais desafios técnicos das bases de dados vectoriais da seguinte forma
- Otimização da relação custo/desempenho em relação à carga
Em comparação com os tipos de dados tradicionais, a análise de dados vectoriais exige muito mais recursos de armazenamento e computação devido à sua elevada dimensionalidade. Além disso, os utilizadores têm mostrado preferências diversas quanto às caraterísticas da carga e à otimização do custo-desempenho das soluções de pesquisa vetorial. Por exemplo, os utilizadores que trabalham com conjuntos de dados extremamente grandes (dezenas ou centenas de milhares de milhões de vectores) preferem soluções com custos de armazenamento de dados mais baixos e latência de pesquisa variável, enquanto outros podem exigir um desempenho de pesquisa mais elevado e uma latência média não variável. Para satisfazer preferências tão diversas, o componente de índice central da base de dados vetorial deve ser capaz de suportar estruturas de índice e algoritmos de pesquisa com diferentes tipos de hardware de armazenamento e computação.
Por exemplo, o armazenamento de dados vectoriais e dos dados de índice correspondentes em suportes de armazenamento mais baratos (como NVM e SSD) deve ser tido em consideração ao reduzir os custos de armazenamento. No entanto, a maioria dos algoritmos de pesquisa vetorial existentes funciona com dados lidos diretamente da memória. Para evitar a perda de desempenho causada pela utilização de unidades de disco, a base de dados vetorial deve ser capaz de explorar a localidade do acesso aos dados combinada com algoritmos de pesquisa, para além de ser capaz de se ajustar a soluções de armazenamento para dados vectoriais e estrutura de índices (Referência n.º 6~8). Com o objetivo de melhorar o desempenho, a investigação contemporânea tem-se centrado nas tecnologias de aceleração de hardware que envolvem GPU, NPU, FPGA, etc. (Referência n.º 9). No entanto, o hardware e os chips específicos de aceleração variam na conceção da arquitetura, e o problema da execução mais eficiente em diferentes aceleradores de hardware ainda não está resolvido.
- Configuração e afinação automatizadas do sistema
A maioria dos estudos existentes sobre algoritmos de pesquisa vetorial procura um equilíbrio flexível entre os custos de armazenamento, o desempenho computacional e a precisão da pesquisa. Em geral, tanto os parâmetros do algoritmo como as caraterísticas dos dados influenciam o desempenho efetivo de um algoritmo. Dado que as exigências dos utilizadores diferem em termos de custos e desempenho, a seleção de um método de pesquisa vetorial que se adeqúe às suas necessidades e caraterísticas dos dados constitui um desafio significativo.
No entanto, os métodos manuais de análise dos efeitos da distribuição dos dados nos algoritmos de pesquisa não são eficazes devido à elevada dimensionalidade dos dados vectoriais. Para resolver este problema, o meio académico e a indústria procuram soluções de recomendação de algoritmos baseadas na aprendizagem automática (Referência n.º 10).
A conceção de um algoritmo de pesquisa vetorial inteligente baseado em aprendizagem automática é também um ponto de interesse para a investigação. De um modo geral, os algoritmos de pesquisa vetorial existentes são desenvolvidos universalmente para dados vectoriais com várias dimensionalidades e padrões de distribuição. Consequentemente, não suportam estruturas de índice específicas de acordo com as caraterísticas dos dados, pelo que têm pouco espaço para otimização. Os estudos futuros devem também explorar tecnologias eficazes de aprendizagem automática que possam adaptar as estruturas de índices a diferentes caraterísticas dos dados (Referência n.º 11-12).
- Suporte para semântica de consulta avançada
As aplicações modernas recorrem frequentemente a consultas mais avançadas em vectores - a semântica tradicional de pesquisa do vizinho mais próximo já não é aplicável à pesquisa de dados vectoriais. Além disso, está a surgir a procura de pesquisa combinada em múltiplas bases de dados vectoriais ou em dados vectoriais e não vectoriais (Referência n.º 13).
Especificamente, as variações nas métricas de distância para a similaridade vetorial crescem rapidamente. As pontuações de semelhança tradicionais, como a distância euclidiana, a distância do produto interno e a distância cosseno, não podem satisfazer todas as exigências das aplicações. Com a popularização da tecnologia de inteligência artificial, muitas indústrias estão a desenvolver as suas próprias métricas de semelhança vetorial específicas da área, como a distância de Tanimoto, a distância de Mahalanobis, a superestrutura e a subestrutura. A integração destas métricas de avaliação nos algoritmos de pesquisa existentes e a conceção de novos algoritmos que utilizem as referidas métricas são problemas de investigação difíceis.
À medida que a complexidade dos serviços para os utilizadores aumenta, as aplicações terão de pesquisar em dados vectoriais e não vectoriais. Por exemplo, um recomendador de conteúdos analisa as preferências dos utilizadores e as suas relações sociais e associa-as aos temas actuais para apresentar o conteúdo adequado aos utilizadores. Essas pesquisas envolvem normalmente consultas em vários tipos de dados ou em vários sistemas de processamento de dados. Um outro desafio para a conceção de sistemas consiste em apoiar estas pesquisas híbridas de forma eficiente e flexível.
Autores
Dr. Rentong Guo (Doutorado em Teoria e Software Informático, Universidade de Ciência e Tecnologia de Huazhong), sócio e Diretor de I&D da Zilliz. É membro do Comité Técnico da Federação de Computadores da China sobre Computação e Processamento Distribuídos (CCF TCDCP). A sua investigação centra-se em bases de dados, sistemas distribuídos, sistemas de cache e computação heterogénea. Os seus trabalhos de investigação foram publicados em várias conferências e revistas de topo, incluindo Usenix ATC, ICS, DATE, TPDS. Como arquiteto da Milvus, o Dr. Guo procura soluções para desenvolver sistemas de análise de dados baseados em IA altamente escaláveis e económicos.
Xiaofan Luan, sócio e Diretor de Engenharia da Zilliz, e membro do Comité Técnico Consultivo da LF AI & Data Foundation. Trabalhou sucessivamente na sede da Oracle nos EUA e na Hedvig, uma startup de armazenamento definido por software. Juntou-se à equipa da Alibaba Cloud Database e foi responsável pelo desenvolvimento da base de dados NoSQL HBase e Lindorm. Luan obteve o seu mestrado em Engenharia Eletrónica e de Computadores na Universidade de Cornell.
Dr. Xiaomeng Yi (Doutorado em Arquitetura de Computadores, Universidade de Ciência e Tecnologia de Huazhong), investigador sénior e líder da equipa de investigação da Zilliz. A sua investigação centra-se na gestão de dados de alta dimensão, na recuperação de informação em grande escala e na atribuição de recursos em sistemas distribuídos. Os trabalhos de investigação do Dr. Yi foram publicados nas principais revistas e conferências internacionais, incluindo IEEE Network Magazine, IEEE/ACM TON, ACM SIGMOD, IEEE ICDCS e ACM TOMPECS.
Filip Haltmayer, Engenheiro de Dados da Zilliz, licenciou-se na Universidade da Califórnia, Santa Cruz, com um bacharelato em Ciências da Computação. Depois de se juntar à Zilliz, Filip passa a maior parte do seu tempo a trabalhar em implementações na nuvem, interações com clientes, palestras técnicas e desenvolvimento de aplicações de IA.
Referências
- Projeto Milvus: https://github.com/milvus-io/milvus
- Milvus: Um sistema de gestão de dados vectoriais construído para o efeito, SIGMOD'21
- Projeto Faiss: https://github.com/facebookresearch/faiss
- Projeto Annoy: https://github.com/spotify/annoy
- Projeto SPTAG: https://github.com/microsoft/SPTAG
- GRIP: Multi-Store Capacity-Optimized High-Performance Nearest Neighbor Search for Vetor Search Engine, CIKM'19
- DiskANN: Busca rápida e precisa do vizinho mais próximo em um bilhão de pontos em um único nó, NIPS'19
- HM-ANN: Pesquisa eficiente do vizinho mais próximo de mil milhões de pontos em memória heterogénea, NIPS'20
- SONG: Pesquisa aproximada do vizinho mais próximo em GPU, ICDE'20
- Uma demonstração do serviço de afinação automática do sistema de gestão de bases de dados ottertune, VLDB'18
- O caso das estruturas de índices aprendidas, SIGMOD'18
- Melhorando a busca aproximada do vizinho mais próximo através da terminação antecipada adaptativa aprendida, SIGMOD'20
- AnalyticDB-V: Um motor analítico híbrido para a fusão de consultas para dados estruturados e não estruturados, VLDB'20
Envolva-se com a nossa comunidade de código aberto:
- Revolução dos dados na era da IA
- Os dados não estruturados requerem uma pilha de software de base completa
- Principais atributos das bases de dados vectoriais
- Arquitetura do sistema de base de dados vetorial
- Desafios técnicos enfrentados pelas bases de dados vectoriais
- Autores
- Referências
- Envolva-se com a nossa comunidade de código aberto:
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word