Я использую картографический сервис, который, учитывая геокруг (определяемый координатой и радиусом), возвращает набор мест в этой области. Я хочу кэшировать результаты, возвращаемые этим картографическим сервисом.
Я ожидаю, что мой кеш будет хранить две таблицы:
- Таблица Places мест, возвращенных службой.
- Таблица Круги с областями, места которых были кэшированы в таблице Места.
Затем, учитывая произвольный новый круг C, я хочу эффективно проверить кеш на предмет того, полностью ли область C покрыта кругами в таблице Circles< /эм>. Если C полностью покрыт, у меня есть попадание в кэш, и мне не нужно обращаться к картографическому сервису. Если C не охватывается полностью, я должен обратиться к картографическому сервису и кэшировать результат.
Вопрос 1: как сохранить набор геокругов, чтобы можно было эффективно проверить, полностью ли покрывает объединение их площадей произвольный новый круг?
Даже с решением Q1 у меня может возникнуть проблема с производительностью, когда промах кеша очень незначителен, и я делаю запрос к картографическому сервису, который едва увеличивает мою кешированную область. Чтобы решить эту проблему, я хочу иметь возможность найти примерную точку в C, которая не покрыта кругами, чтобы использовать ее в качестве центра для запроса картографического сервиса. Я буду повторять этот процесс до тех пор, пока C не будет полностью покрыт.
Вопрос 2: как мне сохранить набор геокругов, чтобы в случае, если их площадь не полностью покрывает заданный круг C, я мог эффективно генерировать пример в C, который не рассматривается?
Я ожидаю, что буду использовать что-то вроде PostgreSQL с PostGIS для реализации моего кэша, но я приветствую другие предложения.