vasketsov писал(а):Да. Например когда тайлов в кэше сильно мало
Кроме того, алгоритм поддается дальнейшей оптимизации.
Для начала, всегда можно вычислить крайние значения x и y для данного полигона (bounding box), и, если кэш структурирован по направлениям x/y или y/x, можно перебирать только определенное подмножество каталогов и имен файлов кэша.
Но в рассматриваемом примере это не так. Потому что в рассматриваемом примере проблема решается...
Не совсем согласен с формулировкой:)
В рассматриваемом примере это так (скорость работы была бы быстрее), но эту проблему можно решить и мультиполигоном/полигоном с перемычками.
Априори нельзя сказать, где будет меньше I/O, меньше время работы, меньше блокировок в случаеконкурентного доступа,... - это всё могут быть разные варианты.
В данном случае, описанном пользователем, очевидно, что 99% времени занимают запросы к диску/базе с ответом "не найдено".
Можно ссылку на исходники или маны, где была бы такая оптимизация?
А то наличие расширений для типов ещё ничего не говорит об оптимизации и её качестве.
Хотя если имеется в виду индексирование... ))
А в чем основания для иронии или слабое место индексирования?
Да, сам я не работал с пространственными СУБД, но знакомые проект делали. Не совсем понимаю, в чем Вы видите слабость таких решений?
Если индексирование по какой-то причине считаете избыточным, то данную вырожденную ситуацию (большой полигон с разреженными данными) ускорило бы даже предварительное построение индекса на лету.
И еще, пришла аналогия с алгоритмом закрашивания полигона в растровой графике.
Идем сверху вниз и на каждой горизонтальной линии x вычисляем крайнюю левую yl и крайнюю правую yr точки, попадающие в полигон. Остается нарисовать линию x yl - x yr, или просканировать последовательно кэш/базу в каталоге x по именам файлов yl..yr.
При этом "алгоритм по кэшу" - это как последовательный проход по всем точкам экрана с проверкой, попадает ли точка в полигон, а "алгоритм по площади" - это (насколько понял) последовательное долбление в каждую точку полигона. "Алгоритм закрашивания" будет настолько же (чуть более) эффективным, как последний, и значительно более эффективным в случае разреженных данных.
Впрочем, могу ошибаться, так как не знаю всех нюансов, как там у вас всё организовано.