У меня есть координаты lat/lon в 400-миллионной таблице разделенных разделов mysql. Таблица увеличивается на 2000 записей в минуту, а старые данные размываются каждые несколько недель. Я изучаю способы пространственного анализа этих данных по мере их появления.
Для большей части анализа требуется найти, находится ли точка в конкретном полигоне lat/lon или в каких полигонах содержится эта точка.
Я вижу следующие способы решения проблемы в многоугольнике (PIP):
-
Создайте функцию mysql, которая принимает точку и геометрию и возвращает логическое значение. Простой, но не уверенный способ использования геометрии для выполнения операций с координатами lat/lon, поскольку Geometry предполагает плоские поверхности, а не сферы.
-
Создайте функцию mysql, которая принимает точку и идентификатор настраиваемой структуры данных и возвращает логическое значение. Вершины многоугольников могут быть сохранены в таблице, а функция может вычислять PIP с использованием сферической математики. Большое количество точек полигона может привести к огромной таблице и медленным запросам.
-
Оставьте данные точки в mysql и сохраните данные полигона в PostGIS и используйте сервер приложений для запуска запроса PIP в PostGIS с помощью пробной точки в качестве параметра.
-
Портируйте приложение из MySQL в Postgresql/PostGIS. Это потребует больших усилий для переписывания запросов и процедур. Я все еще могу это сделать, но насколько хорош Postgresql при обработке 400 миллионов строк. Быстрый поиск в google для "mysql 1 billion rows" возвращает много результатов. тот же запрос для Postgres не возвращает никаких релевантных результатов.
Хотелось бы услышать некоторые мысли и предложения.