PHP - запрос к базе данных или POST - PullRequest
2 голосов
/ 31 октября 2010

У меня есть страница поиска, которая позволяет пользователям фильтровать других пользователей по различным категориям (возраст, пол, страна, регион, этническая принадлежность и т. Д.).При первом вызове функции поиска она получает все возможные значения для каждой категории из базы данных.Просто интересно, хотя ...

Лучше ли отправлять эти данные обратно каждый раз, когда страница перезагружается (в сериализованном скрытом поле формы), или я должен получать эту информацию из базы данных каждый раз, когда страницазагружен.

Если я правильно понимаю ситуацию, опция сериализованного POST увеличит потребление пропускной способности сайтов при передаче данных с компьютера пользователя на сервер и обратно на компьютер пользователя снова.С другой стороны, запросы к базе данных каждый раз увеличивали бы нагрузку на сервер / базу данных, но использовали бы только половину пропускной способности.

Если это так, какой вариант мне выбрать ... Я знаю, чтоэто, вероятно, не имеет большого значения для количества трафика, который я получу, но я хочу изучить лучшие методы выполнения такого рода вещей: P

Ответы [ 4 ]

2 голосов
/ 31 октября 2010

Как правило, я бы всегда держал все под вашим контролем. Что означает держать его между вашим сервером и базой данных.

Вы не можете контролировать скорость интернет-соединения пользователя, задержку в сети и т. Д.

Кроме того, если вы хотите хранить вещи между запросами, задумывались ли вы об использовании сеансов или кэша? Кэш, такой как APC , позволит вам хранить данные на сервере для следующего запроса, поэтому ему не нужны ни база данных, ни пропускная способность.

1 голос
/ 31 октября 2010

Я думаю, что подход "POST back", как правило, не очень хорош:

  1. Это может привести к проблемам с безопасностью

  2. Обычно соединение между базой данных и веб-сервером имеет более высокую пропускную способность, чем соединение между клиентом и веб-сервером

Я бы рекомендовал либо использовать кэширование данных на стороне веб-сервера (см. Другие ответы для ссылок), либо осуществлять фильтрацию / сортировку данных на стороне клиента - для этого должны быть готовые библиотеки javascript.

0 голосов
/ 31 октября 2010

Сериализуя ваш результат и отправляя его обратно через POST, вы должны каким-то образом «напечатать» их в вашей форме, что означает, что он может быть закален, нет, это определенно не жизнеспособное решение.

Кэширование ваших результатовв memcache, APC и т. д. может быть отличной альтернативой.Если вы не хотите или не можете использовать одно из этих решений, уже есть кэш ядра базы данных, который позаботится о большинстве накладных расходов для вас.

И последнее: страница поиска должна использовать метод GET.согласно спецификациям HTTP / REST: POST должен использоваться для вставки, а GET должен использоваться для извлечения.

0 голосов
/ 31 октября 2010

Facebook и многие другие компании используют memcache для хранения результатов поиска и запроса этого кэша, чтобы минимизировать запросы к базе данных.

Вы можете сохранить результаты первого поиска в memcache, и, поскольку это расширенный набор данных, впоследствии отфильтрованных с использованием различных параметров, все последующие запросы будут направлены в кэш, а не в базу данных.

...