Здравствуйте. Имеется следующая ситуация. Есть инфоблок [B]местоположения[/B], где разделы - это [B]страны[/B](верхний уровень) и [B]регионы[/B](дочерние). На последнем уровне в разделах содержаться элементы - [B]населенные пункты[/B]. Такую структуру потребовал заказчик, чтобы можно легко было смотреть вложенность и добавлять переводы названий для нескольких языков. Сам бы попробовал сделать на хайлоадах.
Есть инфоблок [B]партнеров[/B]. Каждый партнер - [B]элемент[/B]. В нем есть [U]привязка[/U] к [B]населенному пункту[/B].
У нас есть гугл-карта, на которых должны отображаться[B] контуры регионов[/B] и [B]маркеры партнеров[/B]. Контуры [U]кликабельны[/U]. Т.е. кликнув на контур страны, попадаешь уровнем ниже, где есть контуры областей. Как это выглядит, см. скриншот к посту. Работает все это дело на аякс-запросах.
Проблема в следующем. На уровне, например Франции мне нужно показать всех партнеров. Для этого нужно найти всех партнеров, которые привязаны к [B]населенным пунктам Франции[/B]. Населенных пунктов тысячи. Получается приблизительно такая последовательность действий
1. Найти все [B]населенные пункты [/B]Франции
2. Найти всех [B]партнеров[/B], которые привязаны к этим [B]населенным пунктам[/B](тысячи их) и соответствуют фильтру(об этом чуть ниже)[B]
[/B]
Это порождает гигантские запросы. Можно конечно закешировать эти данные, но у нас на карте еще есть фильтр, например по языкам, на которых говорит партнер. В итоге мы получаем множество комбинаций. Т.е. например человек зашел на уровень Франции и ищет партнеров на русском и английском. Это один кеш, второй просто на русском - второй кеш, третий на английском и французском - третий кеш.
Прошу следующие советы:
1. Как можно оптимизировать данные запросы? Логичным шагом будет создание избыточных данных. Например, еще хранить привязку к стране. Тогда на уровне страны запросы можно сэкономить. Но на уровне ниже населенных пунктов все равно больше тысячи. Вложенность в разных странах разная. Поэтому создавать поля типа суб-регион, суб-суб-регион наверное очень плохой вариант.
2. Какое время кеширования выставить? Кеш будет зависеть от региона+множественные параметры фильтра(параметров 3-4), в каждом параметре до 10 значений. Т.е. cache_id получается типа REGION_234556_LANGUAGE_1_3_5_PARAM3_4_7. Не требуется мгновенное обновление данных. Т.е. добавленный партнер может появится спустя 3-4 часа.
Буду благодарен за любые советы