Consulta/gravação De Grande Volume De Registros Em Indices Fulltext, Dúvida em questões de performance
Tenho uma tabela relativamente grande onde gravo informações que pego de diversos feeds RSS... atualmente essa tabela possui um pouco mais de 2.000.000 de registros.
Já achei muitos casos de feeds é usam campos diferenciados como registro único (um link, um código, um texto)... então eu tenho 2 campos na tabela para refletir essa realidade([b]feed_unico_campo[/b] e [b]feed_unico_valor[/b])... assim faço a checagem dos feeds novos que chegam para verificar se já existe ocorrência no banco de dados... até aí tranquilo. O problema é que isso gera um certo gargalo nas consultas ao banco de dados fazer consultas do tipo [b]LIKE "String de texto longo%"[/b] sacrifica e muito a performance... ainda mais com zilhões de novas ocorrências chegando a toda hora.
Mudei então para indices FULLTEXT adicionando um indice para o campo [color=#FF0000][b]feed_unico_valor[/b][/color]. E parece ser uma boa saída, mas estou com uma dúvida cruel: [b]Melhor seria fazer UMA CONSULTA ÚNICA, passando todos os campos únicos como parâmetro para a pesquisa FULLTEXT; ou percorrer os itens UM A UM e consultando se existem no banco para só então inserir o item que não for encontrado?[/b]
Detalhe: Uso PHP/PDO para a manipulação desses feeds.
Já achei muitos casos de feeds é usam campos diferenciados como registro único (um link, um código, um texto)... então eu tenho 2 campos na tabela para refletir essa realidade([b]feed_unico_campo[/b] e [b]feed_unico_valor[/b])... assim faço a checagem dos feeds novos que chegam para verificar se já existe ocorrência no banco de dados... até aí tranquilo. O problema é que isso gera um certo gargalo nas consultas ao banco de dados fazer consultas do tipo [b]LIKE "String de texto longo%"[/b] sacrifica e muito a performance... ainda mais com zilhões de novas ocorrências chegando a toda hora.
Mudei então para indices FULLTEXT adicionando um indice para o campo [color=#FF0000][b]feed_unico_valor[/b][/color]. E parece ser uma boa saída, mas estou com uma dúvida cruel: [b]Melhor seria fazer UMA CONSULTA ÚNICA, passando todos os campos únicos como parâmetro para a pesquisa FULLTEXT; ou percorrer os itens UM A UM e consultando se existem no banco para só então inserir o item que não for encontrado?[/b]
Detalhe: Uso PHP/PDO para a manipulação desses feeds.
Wemerson Guimarães
Curtidas 0
Respostas
Danilo Gomes
04/12/2012
Cara, em geral prefiro agregar consultas em uma única, ou em "lotes".
Mas isso só fazendo testes mesmo e avaliando a performance.
Para estes casos, pode buscar saber sobre o Apache Solr.
Ele utiliza o Lucene para indexação de conteúdo, mas disponibiliza uma interface REST, que possibilita a interoperabilidade.
Mas isso só fazendo testes mesmo e avaliando a performance.
Para estes casos, pode buscar saber sobre o Apache Solr.
Ele utiliza o Lucene para indexação de conteúdo, mas disponibiliza uma interface REST, que possibilita a interoperabilidade.
GOSTEI 0