Pergunta

Estou escrevendo um aplicativo PHP-MYSQL. O aplicativo permite que o usuário execute uma pesquisa no banco de dados. Quando a pesquisa é executada, se o usuário clicar no botão Voltar para voltar a ele depois de examinar um item criado por ele, eles são perguntados se eles gostariam de reenviar a consulta (ele usa a postagem). O que executaria novamente a pesquisa no banco de dados. O uso do GET não resultaria na solicitação de repassar - mas ainda executaria a pesquisa novamente.

Existe uma maneira de armazenar a pesquisa e recordá -la, sem executá -la no banco de dados?

Isso pode salvá -lo no banco de dados, ou de alguma forma no PHP - talvez com sessões? Pode haver muitos dados saindo dessas pesquisas, eu sinto que provavelmente é demais para sessões.

A outra maneira que posso imaginar é armazená -lo no banco de dados, em algum tipo de tabela temporária. Criando a tabela com as colunas que pretendo consultar e selecionando uma inserção. Em seguida, selecionando * na tabela. Isso também parece uma má ideia. Muitas tabelas temporárias criadas dinamicamente flutuando.

Eu sei que isso pode ser feito. Pesquisas salvas são coisas que você vê em muitos aplicativos da Web. Então, como isso geralmente é feito?

Foi útil?

Solução

Memcached

ou

APC

No entanto, noto que você não está dando nenhum motivo Por quê Você deseja cache os resultados de uma pesquisa. "Porque é mais rápido, e eu li que torna meu aplicativo mais escalável", é a razão usual para isso. Isso cheira a otimização prematura.

Eu recomendo que você construa seu aplicativo e perfine -o. Quão caro são essas "pesquisas"? Por que Eles são caros? É um design de esquema ruim? É uma indexação ruim? É má escolha do mecanismo de armazenamento?

Você percebe que o mysql tem um Cache de consulta, certo? Em muitos casos, isso pode ser tudo o que você precisa. Tente executar uma das suas consultas "pesquisas" caras usando o cliente MySQL e observe a hora e execute -a novamente. Ver?

Outras dicas

Para corrigir o erro "Você deseja re-submissão", você pode armazenar a solicitação na sessão ou no banco de dados e redirecionar imediatamente para uma nova página para realmente executar a pesquisa:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

Isso pode então pegar os campos de consulta de $ _session ['Search'] [22] ou o banco de dados ...

Quanto aos resultados da economia, você pode confiar no cache do navegador, ou pode armazenar SERPs individuais na sessão ou db ... expirando os velhos em algum momento, se necessário ...

Criar uma tabela de resultados é bom (e aceleraria a paginação em pesquisas complexas), mas você poderia ter milhões de acertos lá, de modo que uma paginação com armazenamento em cache seria uma maneira mais geral.

Se o usuário quiser retornar aos dias de pesquisa ou semanas depois, basta executar novamente a pesquisa com os campos de consulta salvos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top