Скручивание против удаленной базы данных против локального файла? - PullRequest
0 голосов
/ 08 сентября 2011

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

На данный момент это получается с помощью запроса cURL к уже существующей библиотеке geo.php, которая, я думаю, разрешает код страны из файла .dat, загруженного из MaxMind. Очевидно, хотя этот метод сталкивался с проблемами при больших нагрузках, возможно, из-за утечки памяти? Никто точно не уверен.

Полномочия, которые мне предложили, чтобы мы отказались от cURLing и извлекли код страны из локальной библиотеки геокодирования с данными, также хранящимися в локальном файле. Или, возможно, мастер-файл, размещенный, например, на Amazon S3. Я немного опасаюсь того, что массивный файл поиска по IP-адресам в стране будет храниться без необходимости в сотне разных мест, конечно.

Одна вещь, которую я сделал, поместила данные в базу данных mysql и получила необходимые результаты, подключившись к ней; Я не знаю наверняка, но мне кажется, что наши сайты, как правило, работают быстро и эффективно при подключении к централизованным данным MySQL, так что это не будет хорошим способом решения этой конкретной проблемы?

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

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

У меня был веб-сайт, использующий cURL для получения кода страны от maxmind, а также около 1,5 лет, насколько я мог судить, без проблем. Я сделал одну вещь: установил тайм-аут на ~ 1-2 секунды для запроса cURL и вернул значение по умолчанию на заданный код страны, если он не поступил. Я думаю, что мы просмотрели около миллиона запросов, так что, должно быть, они были использованы ... Если до этого не дошло, я больше не хотел замедлять страницу. Это главный недостаток использования внешней библиотеки - полагаться на их время отклика.

Что касается его наличия на местном уровне, главное, о чем следует беспокоиться: будет ли он обновлен через год? Очевидно, что вы не можете получить больше разных IP-адресов из текущего пула IPv4, но потенциально интернет-провайдеры могут покупать / продавать / обмениваться IP-адресами с разными странами (я не знаю, как это работает, но я видел много IP-адресов от разные страны, и они, кажется, никогда не имеют какой-либо модели для них, смеется). Если этого не произойдет, не обращайте внимания на эту часть: с. Еще одна вещь, связанная с локальным хранением, заключается в том, что вы можете использовать кеш запросов MySQL для хранения результата, чтобы вам не приходилось беспокоиться о ресурсах при последующих загрузках страниц, или просто делайте то, что я делал, и сохраняйте его в куки и проверяйте сначала перед керлингом (или поиском).

0 голосов
/ 08 сентября 2011

Вы задаете этот вопрос неправильно.
Есть только два разных метода:

  • поиск в сети
  • запрос локального ресурса

И только один ответ:

НИКОГДА не выполнять поиск сети при обслуживании запроса клиента.

Итак, пока вы обращаетесь к локальному ресурсу (хорошо - в пределах одного и того же центра обработки данных) - все в порядке.
Если вы запрашиваете какой-то удаленный ресурс - независимо от того, есть ли у него curl, база данных или что-то еще - у вас проблемы.

Это правило кажется мне очевидным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...