Я использую базу данных mySQL на сайте для расчета расстояния между несколькими точками на основе почтовых индексов, широт и долгот. Например. Точка А с почтовым индексом 123456 имеет широту 100 и долготу 200. Используя статическую формулу, расстояние между точкой А и несколькими другими точками вычисляется и возвращается в реальном времени. Контрольная точка A может измениться на точку B с другой широтой/долготой.

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

Помещение расстояний в БД нецелесообразно, поскольку это означает поиск N x N (999999 x 999999) и будет увеличиваться экспоненциально по мере добавления новых точек данных.

2
user239913 29 Дек 2009 в 04:54

2 ответа

Поскольку похоже, что вы занимаетесь географическими вещами, не задумывались ли вы над http://postgis.refractions.net/ ? (если вы не привязаны к MySQL), так как он настроен/предназначен для вычислений примерно так.

1
Michael Neale 29 Дек 2009 в 05:03

Сервер баз данных не предназначен для быстрой арифметики в качестве основной цели.

Убедитесь, что вы полностью эффективно используете индексы.

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

Используйте кэширование везде, где это уместно.

1
Community 23 Май 2017 в 15:18