Skip to content

lucasmbrute2/laravel-benchmarking

Repository files navigation

Benchmarking

A ideia é trazer a diferença entre requests com Full-text search indexes e buscas em um JSON com os próprios métodos do PHP.

Alguns pontos devem ser considerados:

  1. O Laravel tem built-in o scout, que é uma solução para implementar full-text search de forma simples, utilizando serviços como Algolia , Meilisearch e TypeSense. Por serem serviços, alguns são pagos e outros Open Source.
  2. Esse Benchmarking não metrifica quanto de RAM ou CPU está sendo gasto.
  3. O processo de marshalling e unmarshalling é considerado "caro", por isso deve ser feito com cautela. O processo em busca no JSON pode causar problemas de memória, mas não consigo metrificar isso nessa POC. leia mais

Dito isso, vamos aos testes:

Foram criados 2 endpoints

/seeding -> Fará a introspecção de dados do JSON no database.

/find-json -> Fará as buscas do dado desejado, pelo input mockado no código.

Considerando o JSON test-file.json que está na pasta public, criei 2 cenários:

  1. Busca os valores utilizando o Full-text search index.
  2. Busca os valores diretamente do JSON.

A média dos resultados de 10.000 iterações para uma palavra que NÃO existia foi respectivamente:

img.png

A média dos resultados de 10.000 iterações para uma palavra que existia foi respectivamente

img_1.png

Conclusão

Ambas as repostas são extremamente rápidas, sendo a busca em JSON mais veloz em todos os casos, porém, não está sendo considerado o uso de RAM e CPU para conversão de dados, o que em grande escala pode ser trabalhoso. Outro ponto não explicíto, é a coesão dos dados da resposta, que com a busca indexada apresenta melhor experiência de busca, sendo talvez mais ideal para a experiência do usuário.

Bancos de dados relacionais costumam utilizar AVL Tree para balancear e distribuir indexes, sendo trabalhoso redistribui-los a cada nova inserção. Nossa vantagem é: Nos faremos poucas mutações e muitas consultas, ou seja, extrair o melhor do poder de indexação.

Então, qual abordagem devemos seguir ?

  • Na minha pesquisa, ambas as abordagens resolvem o problema, sendo a pesquisa em JSON simplista e a inserção em banco mais trabalhosa, podendo ser esse o criétio de escolha.

Existem outras opções de serviço que serão abordadas fora desse repositório, então por hora é isso. Fim :)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published