Поиск XML или поиск в БД/расчет javascript (на стороне клиента) или php (на стороне сервера)

Допустим, ваш сайт посещают 200 000 уникальных пользователей в день. Итак, ваш сервер сильно загружен/забит; и у вас НЕТ ресурсов для покупки большего/лучшего сервера. Итак, вы застряли с тем, что у вас есть.

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

Вы бы сделали этот расчет через PHP или через JavaScript?

Во-первых, не могли бы вы предварительно рассчитать все близлежащие города в радиусе 140 миль от городов, внесенных в белый список? Например: Город 1 из белого списка может иметь 20 близлежащих городов. Или вы будете каждый раз делать расчеты на лету?

Например: Белый список = Детройт, Мичиган и соседний город = Каламазу, Мичиган (140 миль)

Во-вторых, если предварительно вычислить: вы бы сохранили это в файле XML или в какой-нибудь таблице MySQL? Теперь нам осталось только поискать по таблице (mysql или xml размером не более 1 мб). Я предполагаю, что это было бы неэффективно, потому что браузеру клиента (JavaScript) пришлось бы загружать 1 МБ xml и выполнять поиск по нему. Это сделало бы время загрузки страницы еще медленнее. Использование БД может быть быстрее, но тогда увеличивается нагрузка на БД (если 200 000 уникальных пользователей пытаются загрузить страницу в течение дня).

Возможно, лучшим способом было бы выполнить предварительное вычисление, сохранить предварительно вычисленные результаты в XML, а затем использовать PHP для поиска в XML и поиска ближайшего город из белого списка для пользователя?


person Red Sci    schedule 27.09.2011    source источник


Ответы (1)


Если вы, сайт, на самом деле полагаетесь на информацию о городе, то вы должны сделать расчет на сервере.

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

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

Я хотел бы изучить использование геопространственных возможностей MySQL. Общий вид поиска по координатам здесь:

Самый быстрый способ найти расстояние между двумя точками широты/долготы

Короче говоря, вы настроите базу данных интересующих вас городов с их широтой/долготой и запросите эту таблицу на основе предоставляемой GeoIP широты/долготы.

person Jeff Warnica    schedule 27.09.2011
comment
Короче говоря, вы настроите базу данных интересующих вас городов с их широтой/долготой и запросите эту таблицу на основе предоставленного GeoIP широты/долготы --- так что вы имеете в виду, что эта информация не будет предварительно вычисляться? Мой белый список городов не будет часто меняться. - person Red Sci; 28.09.2011
comment
Список городов, которые у вас есть, и информация об их местоположении могут меняться не очень часто, но кто знает, что GeoIP отправит обратно в качестве информации о местоположении клиента. Или вы имеете в виду, что хотите нормализовать все местоположения клиентов до некоторого списка? - person Jeff Warnica; 28.09.2011
comment
Ну, я имею в виду. У меня уже есть белый список (около 100 городов). Теперь, не было бы проще, если бы я также предварительно вычислил второй список? Для каждого города из белого списка я мог предварительно вычислить все возможные города в радиусе 140 миль. Например: для Детройта, штат Мичиган (город из белого списка), я мог предварительно вычислить Лансинг, штат Мичиган. Итак, если клиент из Лансинга, штат Мичиган. Я показываю Детройт, штат Мичиган, списки. /// Или вы думаете, что лучше просто хранить широту/долготу городов из белого списка. И выполнять оперативный расчет каждый раз (вместо предварительного расчета), когда пользователь посещает мой сайт? - person Red Sci; 29.09.2011
comment
Но клиенты, скорее всего, придут не только из вашего списка известных местоположений. GeoIP только когда-либо говорит, что город является одним из фиксированного списка городов? Можете ли вы получить этот список городов? - person Jeff Warnica; 29.09.2011
comment
1. Да, клиент может быть из любого города. 2. GeoIP предоставляет список всех городов в своей БД maxmind.com/app/geolitecity - Я мог бы найти расстояние каждого из этих городов от моего города из белого списка. А затем сохраните те, которые находятся в пределах 140 миль от моего города из белого списка. Таким образом, Foreach Whitelisted-City: у меня будет предварительно вычисленный список всех городов в пределах 140 миль от этого города из белого списка. Но я не уверен, что это хороший способ сделать это. - person Red Sci; 01.10.2011