Я использую базу данных mySQL на сайте для расчета расстояния между несколькими точками на основе почтовых индексов, широт и долгот. Например. Точка А с почтовым индексом 123456 имеет широту 100 и долготу 200. Используя статическую формулу, расстояние между точкой А и несколькими другими точками вычисляется и возвращается в реальном времени. Контрольная точка A может измениться на точку B с другой широтой/долготой.
Проблема в том, что ЦП сервера работает на пределе возможностей, и для выполнения этих вычислений требуется довольно много времени. Я могу увеличить мощность процессора, но хотел узнать, есть ли более эффективный способ сделать это.
Помещение расстояний в БД нецелесообразно, поскольку это означает поиск N x N (999999 x 999999) и будет увеличиваться экспоненциально по мере добавления новых точек данных.
2 ответа
Поскольку похоже, что вы занимаетесь географическими вещами, не задумывались ли вы над http://postgis.refractions.net/ ? (если вы не привязаны к MySQL), так как он настроен/предназначен для вычислений примерно так.
Сервер баз данных не предназначен для быстрой арифметики в качестве основной цели.
Убедитесь, что вы полностью эффективно используете индексы.
Используйте формулу быстрого квадратного корня, если вам нужны фактические расстояния, иначе просто сравните квадраты расстояний.
Используйте кэширование везде, где это уместно.
Похожие вопросы
Связанные вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.