paint-brush
Comparando Meilisearch e Manticore Search usando benchmarks chavepor@snikolaev
4,202 leituras
4,202 leituras

Comparando Meilisearch e Manticore Search usando benchmarks chave

por Sergey Nikolaev10m2023/05/02
Read on Terminal Reader

Muito longo; Para ler

Os mecanismos de pesquisa desempenham um papel cada vez mais crucial em potencializar as funcionalidades de pesquisa em várias plataformas. Escolher o mecanismo de pesquisa certo para o seu projeto requer uma compreensão completa de seu desempenho, casos de uso e limitações. Este artigo tem como objetivo fornecer uma comparação entre Meilisearch e Manticore Search, com foco em seu conjunto de recursos e ingestão de dados.
featured image - Comparando Meilisearch e Manticore Search usando benchmarks chave
Sergey Nikolaev HackerNoon profile picture
0-item
1-item

No cenário digital em constante evolução, os mecanismos de pesquisa desempenham um papel cada vez mais crucial ao potencializar as funcionalidades de pesquisa em várias plataformas. Entre os mecanismos de busca populares, Meilisearch e Manticore Search se destacam com suas ofertas exclusivas.


No entanto, escolher o mecanismo de pesquisa certo para o seu projeto requer uma compreensão completa de seu desempenho, casos de uso e limitações. Este artigo tem como objetivo fornecer uma comparação entre Meilisearch e Manticore Search, com foco em seu conjunto de recursos e ingestão de dados e desempenho de pesquisa em três benchmarks do mundo real: 10 milhões de logs NGINX, conjunto de dados de 1,1 milhão de documentos do Hacker News e conjunto de dados de 116 milhões de documentos do Hacker News todos disponíveis em DB Benchmarks . Todos os scripts de teste de desempenho, configurações e coletas de dados estão disponíveis publicamente e podem ser reproduzidos.

Relevância da pesquisa de texto completo

Tanto o Manticore quanto o Meilisearch se posicionam como mecanismos de pesquisa de texto completo. O elemento-chave nos mecanismos de pesquisa de texto completo é como eles classificam os documentos durante uma pesquisa.


Escolher o algoritmo de classificação de pesquisa correto é crucial para garantir que os usuários possam encontrar as informações de que precisam com precisão e recuperação. No contexto da relevância da pesquisa de texto completo, é essencial entender como esses algoritmos funcionam e como eles contribuem para fornecer resultados de pesquisa precisos e significativos.


O Manticore Search é muito flexível no controle da classificação de pesquisa e expõe dezenas de fatores de classificação; no entanto, por padrão, ele emprega o algoritmo clássico BM25 e seus derivados. O BM25 é um algoritmo de recuperação de informações bem estabelecido que calcula a relevância de documentos com base na frequência do termo e na frequência inversa do documento.


Uma solicitação pull contínua para o benchmark BEIR (Benchmarking and Evaluation of Information Retrieval) demonstra o compromisso da Manticore Search com a relevância da pesquisa. O BEIR é uma estrutura de avaliação que mede o desempenho dos sistemas de recuperação de informações em várias tarefas, como recuperação de documentos e resposta a perguntas. Os resultados do benchmark BEIR podem ser encontrados aqui:


https://docs.google.com/spreadsheets/d/1_ZyYkPJ_K0st9FJBrjbZqX14nmCCPVlE_y3a_y5KkYI/edit#gid=0 .


Por outro lado, Meilisearch afirma oferecer boa relevância de pesquisa, mas não há referências públicas disponíveis para substanciar essa afirmação. De acordo com uma discussão no Hacker News , os usuários do Meilisearch mencionaram sua relevância de pesquisa, mas sem nenhuma evidência empírica, é difícil comparar objetivamente seu desempenho com o Manticore Search.


No geral, o uso de algoritmos de classificação comprovados e a participação da Manticore Search no benchmark BEIR destacam seu compromisso em fornecer resultados de pesquisa altamente relevantes, tornando-a uma escolha confiável para vários aplicativos. Embora o Meilisearch também possa se destacar na relevância da pesquisa de texto completo, é difícil fazer uma declaração definitiva, pois não há benchmarks estabelecidos e o algoritmo usado não é amplamente conhecido.

Tamanho do índice e ingestão de dados

O Manticore Search demonstra sua capacidade de lidar efetivamente com grandes conjuntos de dados (por exemplo, teste de corridas de táxi de 1,7 bilhão de documentos ou simplesmente Craigslist.org ) por meio do uso de armazenamentos lineares e colunares. A abordagem colunar foi projetada especificamente para acelerar o desempenho da pesquisa e diminuir o consumo de RAM em grandes conjuntos de dados. Em contraste, o armazenamento em linha padrão do Manticore Search oferece desempenho imbatível em conjuntos de dados pequenos e médios. Essa flexibilidade torna o Manticore Search uma escolha ideal para uma ampla gama de aplicações.


O Meilisearch, por outro lado, luta com conjuntos de dados maiores, pois não foi possível carregar o conjunto de dados maior do Hacker News no mecanismo de pesquisa, mesmo após 2 dias de carregamento. Além disso, Meilisearch experimenta uma degradação no desempenho ao carregar documentos. À medida que o conjunto de dados cresce, o tempo necessário para carregar cada lote subsequente de documentos aumenta. Esse problema de desempenho indica que Meilisearch tem um problema com escalabilidade de dados e pode ser problemático para aplicativos que requerem ingestão de dados em tempo real ou indexação de grandes conjuntos de dados. Meilisearch processa atualizações de documentos em uma única fila, o que pode levar a gargalos e redução de desempenho ao longo do tempo.


É crucial observar que as atualizações de documentos no Meilisearch não são refletidas instantaneamente nas consultas de pesquisa. Isso ocorre porque o Meilisearch emprega uma fila de tarefas assíncrona para lidar com atualizações, garantindo que o desempenho da pesquisa permaneça estável mesmo durante operações de indexação intensivas.

Ao atualizar um documento, a alteração é adicionada à fila de tarefas e processada pelo mecanismo em segundo plano. Depois que a tarefa é concluída, os dados atualizados ficam disponíveis nos resultados da pesquisa. O tempo de processamento pode variar dependendo do tamanho da atualização e dos recursos do servidor. Para monitorar o status da tarefa, você pode utilizar a API de Tarefas , que oferece informações sobre o andamento e a conclusão da tarefa.


Manticore oferece inse em tempo real

rt, substituir e excluir recursos, permitindo que as alterações sejam imediatamente visíveis assim que a consulta for concluída.


Em resumo, embora o Meilisearch forneça recursos de pesquisa rápidos e eficientes, lembre-se de que as atualizações nos documentos podem não ser imediatamente visíveis nos resultados da pesquisa devido ao processamento assíncrono da tarefa.

Desempenho da pesquisa

O Meilisearch é conhecido por sua velocidade impressionante, superando o Elasticsearch em muitos casos . No entanto, seu desempenho é mais perceptível ao trabalhar com pequenos conjuntos de dados. À medida que o tamanho do conjunto de dados aumenta, o desempenho do Meilisearch pode diminuir.


O Manticore Search fornece consistentemente um desempenho de consulta rápido para vários tipos de consulta e tipos de conjunto de dados, superando o Meilisearch e o Elasticsearch . Com métodos otimizados de indexação por linha e colunar, o Manticore garante uma experiência de pesquisa responsiva, crucial para manter o envolvimento do usuário em aplicativos de alto desempenho.


Em contraste, o Meilisearch luta para lidar eficientemente com grandes conjuntos de dados e sofre com a degradação do desempenho durante o carregamento do documento. Portanto, o Manticore é a escolha superior para quem não quer se preocupar com o tamanho do conjunto de dados.

Testes de referência

Conjunto de dados pequeno do Hacker News (comentários do Hacker News)

O benchmark de pequeno conjunto de dados do Hacker News, que apresenta uma coleção de 1,1 milhão de comentários selecionados do Hacker News com campos numéricos (fonte: https://zenodo.org/record/45901/ ), destaca o desempenho de pesquisa superior do Manticore Search em relação ao Meilisearch. O conjunto de dados contém dados textuais de comentários e campos numéricos, como upvotes, timestamps e IDs de usuário. O teste de benchmark envolve a execução de consultas analíticas e de texto completo para avaliar os recursos dos mecanismos de pesquisa.



Os resultados do benchmark também podem ser verificados neste link .


Infelizmente, o Meilisearch não é capaz de executar muitos tipos de consultas, como consultas de agregação e aquelas com termos negativos de pesquisa de texto completo.


Um aspecto interessante deste benchmark é a diferença significativa no uso do espaço em disco entre os dois mecanismos de busca:


 [email protected] /perf/test_engines/tests/hn_small/manticore # du -sh idx 1.1G idx [email protected] /perf/test_engines/tests/hn_small/meilisearch # du -sh . 38G .


O Meilisearch requer 34x mais espaço em disco para armazenar o mesmo conjunto de dados em comparação com o Manticore Search.

Em termos de desempenho de carregamento de dados, foram necessários:


  • Meilisearch 31 minutos
  • Mantícora 65 segundos


para concluir totalmente o carregamento de dados.

Hacker News Large Dataset (116 milhões de comentários)

Este teste envolve o mesmo conjunto de dados de comentários do Hacker News com curadoria de 1,1 milhão (fonte: https://zenodo.org/record/45901/ ), mas multiplicado 100 vezes, resultando em cerca de 116 milhões de documentos . O benchmark abrange consultas de texto completo e analíticas, tornando-o um excelente caso de teste para avaliar os recursos do mecanismo de pesquisa em uma escala maior.


Meilisearch não pôde carregar os dados em 2 dias. Seu desempenho de inserções foi degradado à medida que o banco de dados crescia. Tentamos otimizá-lo, mas não tivemos sucesso, pois todos os lotes, mesmo quando tentamos torná-los paralelos, iam para uma única fila. Como resultado, não conseguimos nenhuma melhoria nas cargas de dados para Meilisearch. O Meilisearch demorou cerca de 2 dias para carregar apenas 38% dos dados, que já consumiam mais de 850 GB de espaço em disco. Isso é um grande contraste com o Manticore Search, que armazenou todo o conjunto de dados usando aproximadamente 100 GB de espaço em disco e levou 2 horas e 9 minutos para carregar usando um único núcleo de CPU (que é praticamente linearmente escalável).


A incapacidade do Meilisearch de processar todo o grande conjunto de dados do Hacker News destaca seus desafios no gerenciamento e dimensionamento com coleções de dados mais extensas. O desempenho superior do Manticore Search neste benchmark ressalta sua capacidade de lidar com requisitos de pesquisa em larga escala, tornando-o uma escolha mais adequada para aplicativos com coleções de dados maiores.

Como não foi possível carregar os dados no Meilisearch, você pode verificar os resultados somente do Manticore aqui .

10 milhões de logs NGINX

Este teste é baseado em um conjunto de dados contendo 10 milhões de logs NGINX. A fonte desse conjunto de dados é o Kaggle . Os logs do servidor da Web registram vários eventos, fornecendo informações valiosas sobre os visitantes do site, comportamento do usuário, rastreadores que acessam o site, inteligência comercial, problemas de segurança e muito mais. O benchmark usa uma lista selecionada de consultas típicas que um engenheiro de DevOps aleatório pode executar.

Manticore Search e Meilisearch exibiram uma diferença significativa no uso de espaço em disco para o conjunto de dados. O Manticore Search usou 4,4 GB de espaço em disco, enquanto o Meilisearch consumiu 69 GB, o que é aproximadamente 15 vezes mais do que o Manticore. Embora a diferença seja menos dramática do que o teste do pequeno conjunto de dados do Hacker News, ainda é notável, especialmente considerando que o conjunto de dados Logs10m contém menos dados de texto.


O Meilisearch levou cerca de 20 minutos para preencher os dados, enquanto o Manticore terminou em 6 minutos .

Você pode encontrar a comparação detalhada dos resultados de desempenho usando o link fornecido . Observe que muitos resultados vazios são simplesmente devido à incapacidade do Meiliesarch de lidar com certos tipos de consultas. Como resultado, essas consultas foram ignoradas durante o processo de benchmarking.



Comparação de recursos da pesquisa Manticore e Meilisearch

  • Correspondência de texto completo
    • ✅ Manticore: mais de 20 operadores de texto completo. Percolate search (pesquisa em sentido inverso).
    • ❌ Meilisearch: muito simples: pesquisa AND e frase. Nenhuma pesquisa percolada.
  • Relevância da pesquisa
    • ✅ Manticore emprega algoritmos clássicos de classificação testados e comprovados (BM25, BM15). A relevância é comprovada por benchmarks. 7 classificadores integrados e um classificador personalizado com mais de 20 fatores de classificação .
    • ❌ Meilisearch afirma ser uma boa relevância de pesquisa, mas carece de benchmarks públicos para validação. 6 regras de classificação .
  • Armazenar
    • ✅ Manticore: armazenamento em linha próprio para conjuntos de dados pequenos/médios, armazenamento colunar próprio com requisitos de RAM mais baixos, adequado para conjuntos de dados maiores
    • ❌ Meilisearch: LMDB com todas as suas vantagens, desvantagens e consequências: por exemplo, o requisito de memória virtual de 205 GB para um conjunto de dados de 9,1 MB parece estranho.
  • Tamanho do Índice e Carregamento de Dados
    • ✅ O Manticore acomoda grandes conjuntos de dados com métodos de indexação colunar e linear. Sincronize facilmente dados de MySQL, PostgreSQL, MS SQL e qualquer outro banco de dados compatível com ODBC, XML e CSV. Verdadeiras inserções, substituições e exclusões transacionais em tempo real. Registro binário. Atualizações de valor de atributo no local.
    • ❌ Meilisearch tem dificuldade com conjuntos de dados maiores e apresenta degradação de desempenho durante o carregamento de documentos. Você pode carregar CSV e JSON. Somente adição assíncrona de documentos. Nenhuma atualização no local.
  • Esquema
    • ✅ Manticore: Auto-esquema. Auto-ID. Todos os atributos são filtráveis, classificáveis e agrupáveis por padrão.
    • ❌ Meilisearch: Auto-esquema. O ID pode ser selecionado automaticamente no documento. Todos os campos são pesquisáveis por texto completo por padrão, mas os atributos não são filtráveis ou classificáveis. Você deve decidir sobre o esquema antes de carregar os dados no índice para evitar a reindexação completa.
  • Desempenho da Pesquisa
    • ✅ O Manticore supera o Meilisearch em desempenho de busca.
    • ❌ Meilisearch é menos adequado para aplicativos que exigem funcionalidade de pesquisa rápida e escalável.
  • Alta disponibilidade
    • ✅ Manticore: replicação, tabelas distribuídas suportando agentes remotos com espelhamento e diversas estratégias de HA.
    • ❌ Meilisearch: sem replicação, sem pesquisa distribuída, sem espelhamento.
  • tolerância a erros de digitação
    • ✅ Meilisearch oferece tolerância a erros de digitação mais fácil.
    • ❌ Manticore pode lidar com tolerância a erros de digitação, mas exige um esforço maior no aplicativo.
  • Visualização da pesquisa
    • ✅ O Meilisearch apresenta uma visualização de pesquisa útil - uma interface do usuário integrada para pesquisar dados na instância.
    • ❌ O Manticore não possui esse recurso.
  • Tokenização
    • ✅ Manticore: tokenização altamente flexível: caracteres token, caracteres misturados, caracteres ignorados, regras de tokenização de expressão regular, etc., wordforms, stopwords, sinônimos, opção para criar plugins de tokenização, morfologia para vários idiomas com base em lematizadores e lematizadores.
    • ❌ Meilisearch: tokenizer depende do idioma: segmentador Unicode para a maioria dos idiomas, tokenizers específicos para chinês, japonês, hebraico e tailandês. Sinônimos. Palavras de parada.
  • Autenticação
    • ✅ Meilisearch: autenticação integrada.
    • ❌ Manticore: sem autenticação embutida.
  • Interfaces
    • ✅ Manticore: SQL-first, você pode se conectar usando um cliente MySQL. Interface JSON HTTP. Interface binária para tempos de resposta extremamente baixos. Clientes para: PHP, Python, JavaScript, Java, C#, Elixir, Golang.
    • ❌ Meilisearch: interface HTTP JSON. Clientes para: JavaScript, Python, PHP, Java, Ruby, Golang, C#, Rust, Swift, Dart.
  • Casos de uso
    • ✅ Manticore: busca de logs, plataformas de e-commerce, sites ricos em conteúdo, aplicativos corporativos.
    • ❌ Meilisearch: projetos de pequena escala com dados limitados e requisitos de pesquisa.

Casos de uso

Casos de uso para pesquisa de Manticore

  1. Plataformas de comércio eletrônico: o Manticore Search pode gerenciar com eficiência grandes catálogos de produtos, fornecendo resultados de pesquisa relevantes para os clientes com sua funcionalidade facetada avançada . Isso melhora as taxas de conversão e aprimora a experiência geral de compra, tornando-se um recurso muito procurado para plataformas de comércio eletrônico.
  2. Sites ricos em conteúdo: o Manticore Search pode indexar e pesquisar em extensas bibliotecas de conteúdo, como sites de notícias, blogs ou bases de conhecimento. Com classificação adequada de texto completo, garante que os usuários encontrem as informações de que precisam de maneira rápida e eficaz, contribuindo para um maior envolvimento do usuário.
  3. Aplicações corporativas: a escalabilidade e os recursos avançados de pesquisa do Manticore Search o tornam ideal para aplicativos corporativos de grande escala, incluindo sistemas de gerenciamento de relacionamento com o cliente (CRM), sistemas de gerenciamento de documentos e portais de intranet, onde a funcionalidade de pesquisa precisa e eficiente é crítica.
  4. Pesquisa de logs: o Manticore Search é ótimo para pesquisar em logs, pois pode manipular e pesquisar com eficiência em logs enormes. Sua velocidade e desempenho o tornam uma excelente escolha para análise e monitoramento de logs.

Casos de uso para Meilisearch

Projetos de pequena escala: a natureza leve e a facilidade de implantação do Meilisearch o tornam adequado para pequenos projetos com dados limitados e requisitos de pesquisa, como comércio eletrônico de pequena escala, sites pessoais, diretórios locais ou aplicativos da Web simples, onde o carregamento rápido de dados, recursos de pesquisa avançada e escalabilidade não são fatores críticos.

Conclusão

Ao escolher um mecanismo de pesquisa para o seu projeto, é crucial considerar fatores como relevância da pesquisa, escalabilidade e desempenho. O Manticore Search se destaca como a escolha superior para diversos aplicativos e casos de uso, garantindo desempenho e relevância de pesquisa ideais, independentemente do tamanho do conjunto de dados. Seus recursos avançados de pesquisa e análise o tornam uma escolha confiável para projetos que exigem funcionalidade de pesquisa de alto desempenho.


Meilisearch é adequado para pequenos projetos onde recursos de pesquisa avançada e escalabilidade não são fatores críticos.


Em última análise, a escolha entre Manticore Search e Meilisearch dependerá de suas necessidades específicas e requisitos do projeto.


Também publicado aqui.