Какой из них будет безопаснее / лучше бежать? - PullRequest
1 голос
/ 27 октября 2011

У меня 451 город с координатами.Теперь я хочу вычислить расстояние между каждым городом, а затем упорядочить некоторые результаты по этому расстоянию.Теперь у меня есть 2 варианта:

  1. Я могу запустить цикл, который вычислит расстояние для каждой возможной комбинации городов и сохранит их в таблице, что приведет к примерно 200 тыс. Строк.
  2. Или я могу покинуть города без предварительного расчета, а затем, когда отображаются результаты (около 30 на страницу), и рассчитать расстояние для каждого города отдельно.

Я не знаю, какойбыло бы лучше для производительности, но я бы предпочел пойти на первый вариант, в этом случае у меня есть еще одна проблема: есть ли способ, чтобы я мог получить как можно меньше строк?В настоящее время я бы посчитал возможности как 451^2, но я думаю, что мог бы разделить это на 2, поскольку расстояние в случае City1-City2 такое же, как City2-City1.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

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

Так что вам, вероятно, будет лучше без предварительного расчета.

0 голосов
/ 27 октября 2011

Если ваша таблица городов более или менее статична, то вы должны точно рассчитать все расстояния и сохранить их в отдельной таблице. В этом случае у вас будет (451 ^ 2/2) рядов (просто убедитесь, что id City1 всегда ниже id City2 (или наоборот, это не имеет значения)).

...