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