ArcGIS позволяет создавать по запросу кэшированные листы карт по мере посещения их пользователями. Первый пользователь, который переходит по карте в область, отсутствующую в кэш, будет вынужден ждать полной прорисовки листов сервером и добавления их в кэш. Затем листы добавляются в папку кэш на сервере и остаются там, пока их не обновит или не удалит администратор сервера. Это означает, что последующие пользователи карты в этой области не должны будут дожидаться создания листа.
При грамотном использовании кэширование по запросу может сэкономить много времени и места на диске. На многих картах особенно при большом увеличении отображаются области, которые либо пусты или их нельзя использовать, либо они в принципе не нужны пользователю. Кэширование по запросу позволяет исключить ненужные листы, которые не будут прорисовываться и сохраняться, но у пользователя будет возможность просмотреть эти области при первой необходимости.
Хотя кэширование по запросу является полезной функцией, оно может отрицательно сказаться на производительности при неправильном или чрезмерном использовании. Следующие разделы содержат советы по наиболее эффективному использованию кэширования по запросу.
Оптимизация работы
Одним из достоинств полного кэширования карты является то, что вы сможете быстро предоставлять сложные карты, поскольку сайт ArcGIS Server будет выдавать изображение карты по листам, а не прорисовывать всю карту целиком при каждом обращении к ней. Тем не менее при кэшировании по запросу сайт ArcGIS Server будет вынужден динамически прорисовывать листы при обращении пользователей к областям, которые не содержатся в кэше. Динамическая прорисовка занимает больше времени, чем выполнение обычного запроса, так как сайт ArcGIS Server создает несколько листов сразу. Размер этой группы листов составляет 2048x2048 пикселей, если картографический сервис использует сглаживание, и 4096x4096 пикселей, если нет. В результате вам нужно будет подготовить карту к прорисовке обширных областей с приемлемой скоростью.
Более подробно:
В этом случае сайт ArcGIS Server не создает по одному листу за раз, потому что если бы это было так, вы бы увидели повторяющиеся надписи из-за того, что механизм надписывания не может определить, какие надписи существуют на соседних листах.
В следующих двух разделах рассматривается несколько способов, позволяющих сократить производственные затраты на кэширование по запросу.
Где использовать кэширование по запросу?
При конфигурировании кэширования по запросу наиоблее важно определить, какие области будут создаваться по запросу, а какие нужно предварительно кэшировать. Запрещается использовать кэширование по запросу для построения всего кэша. Настоятельно рекомендуется предварительно создать некоторые листы в областях карты, к которым пользователи будут обращаться наиболее часто, чтобы свести к минимуму вероятность того, что пользователи будут кэшировать эти листы по запросу, загружая тем самым сервер.
Определение того, какие области карты будут наиболее популярны, во многом зависит от цели и аудитории карты. На общей базовой карте населенные пункты, дороги, береговые линии, парки и другие достопримечательности могут посещаться чаще, чем другие области.
На тематических картах (в отличии от базовых карт) популярностью могут пользоваться другие области. Например, сотрудники горнодобывающих компаний будут чаще просматривать на картах области скопления горных разработок. Эти области располагаются в незаселенных горных районах, которые не представляют интереса для большинства людей.
Чтобы определить области, требующие предварительного кэширования, изучите поведение пользователей на имеющихся у вас картах либо в сети, либо на компьютере. Вы можете узнать много полезного, проанализировав навигацию пользователей и объекты их запросов.
Объем данных, имеющихся в наличии, и их подробность также важны. Если данных немного или их просто нет для некоторых областей, эти области можно пропустить. Даже если кто-то затребует этот лист, на его прорисовку будет затрачено немного времени, если на этом листе и так ничего нет.
Данные должны иметь непосредственное отношение к назначению карты. Например, если вы работаете в транспортном отделе компании, убедитесь, что области на которых много автомобильных и железных дорог предварительно кэшированы. Для определения областей с высокой плотностью интересных объектов можно использовать такие средства пространственного анализа, как Плотность ядер.
Определив популярные области, создайте класс пространственных объектов, чтобы изолировать эти области от других. К этому классу объектов будет обращаться инструмент Управление листами кэша картографического сервера, чтобы создавались только те листы, которые находятся в пределах границ этого класса объектов.
Можно объединить несколько средств в рамках модели или скрипта для формирования такого класса объектов. Модель может содержать несколько вариантов ввода для потенциально популярных пространственных объектов, а также позволяет помещать объекты в буфер, определять их плотность и, наконец, выполнять постобработку на выходе, чтобы обеспечить формирование такого класса объектов, который можно будет эффективно использовать в качестве шаблона при кэшировании. Например, можно использовать инструмент Упростить полигоны для удаления лишних вершин, которые могут замедлить работу инструментов кэширования.
Чем больше популярных областей карты удастся изолировать, тем больше запросов вы сможете обслужить с помощью предварительно кэшированных листов, избегая создания их по запросу. При крупных масштабах достаточно кэшировать небольшой фрагмент карты, чтобы обработать большинство запросов пользователей. Сэкономленное время и место на диске можно использовать для стратегического кэширования карты в других масштабах.
Тестирование и оптимизация карты
Многие организации работают сложные картографическими документы, изначально предназначенными для использования на ПК с системами ГИС. Эти карты необходимо дополнительно подготовить, чтобы обеспечить их быструю работу, на которую рассчитывают пользователи Интернета.
Прежде чем изменять карту, создайте тестовый кэш для небольшой области, чтобы получить базовые значения. Выберите область, в которой были бы представлены все типы местности на карте, такие как: городская и сельская, равнинная и холмистая. Обратите внимание на время, необходимое для создания тестового кеша. Далее включите кэширование по запросу и увеличьте масштаб отображения области, которой не было в кэше. Запишите, сколько потребовалось времени для загрузки листа в разных масштабах. Если производительность приемлема, можно на этом завершить оптимизацию.
Чтобы отследить более мелкие структуры, снижающие эффективность картографического сервиса, измените на сайте ArcGIS Server уровень регистрации на Подробный. Выполните один запрос к картографическому сервису, например, приблизьтесь к закладке в ArcGIS Pro. Затем проанализируйте журналы ArcGIS Server в ArcGIS Server Manager и сравните время прорисовки для каждого слоя. Вы сразу поймете, какие слои прорисовываются дольше других. Рекомендуется повторить эту операцию для разных областей карты, кэшированных в разных масштабах. По завершении не забудьте установить для отчетности прежний уровень, поскольку на уровне Подробный в журнал записывается больше информации, чем обычно.
После оптимизации карты выполните еще одно тестовое кэширование и запишите, сколько времени заняло создание листа по запросу. Если производительность вас не удовлетворяет, воспользуйтесь одним из следующих советов:
- Выполните предварительное кэширование большей области. Это снизит вероятность запроса на воспроизведение листа, отсутствующего в кэше. Можно разрешить кэширование по запросу только для самых пустынных областей и для самых крупных масштабов. В таком случае одновременно прорисовываться будут лишь несколько объектов.
- Создайте полный кэш Если выполнить предварительное кэширование для всех файлов, вам не потребуется создавать листы по запросу. Если позволяют время и объем жесткого диска, создание полного кэша представляется лучшим вариантом, при условии что он не будет постоянно обновляться. Если вы не можете позволить себе занимать сервер задачами кэширования, можно запрограммировать их выполнение на ночные часы или на выходные дни, чтобы кэш сервиса заполнялся постепенно. Можно занять кэшированием один из экземпляров сервера, а другие экземпляры будут обслуживать пользовательские запросы.
- Используйте динамически прорисованный сервис. Если создать полный кэш невозможно, а система работает удовлетворительно и с динамически прорисованным сервисом, кэширование можно не выполнять совсем. В таком режиме производительность не будет оптимальной, зато в картографическом сервисе всегда будут самые актуальные данные.
Обновление листов
Если вы отредактировали исходные данные кэшированного картографического сервиса, необходимо обновить кэш, чтобы пользователи увидели изменения. Если вы выбрали вариант с предварительным кэшированием областей карты на основе класса пространственных объектов и заполнением остального пространства кэша по запросу, необходимо тщательно проверить, чтобы обновления были отражены во всех областях.
Есть два способа обновления кэша, если вы используете листы созданные по запросу.
Можно удалить все листы, которые создавались по запросу, перед выполнением обновления
Если вы создаете листы по запросу, скорее всего вы выполняли предварительное кэширование конкретной области с использованием класса пространственных объектов. Обычно при обновлении используется тот же самый класс пространственных объектов, а листы, загруженные по запросу, устаревают, если их не удалить.
Чтобы удалить эти листы, запустите инструмент Управление листами кэша картографического сервера в режиме Удалить листы. Удалите листы на основе обратного класса пространственных объектов, для которого вы выполняли предварительное кэширование. Можно с помощью средств редактирования ArcGIS создать полигон, соответствующий полному экстенту вашей карты, и вырезать в нем область, соответствующую той, которая была предварительно кэширована. Получившийся полигон с внутренней пустой областью будет соответствовать территории, в пределах которой надо удалить все листы. См. Вырезать отверстие в полигональном объекте, где объясняется, как вырезать отверстие в полигоне с помощью инструмента Вырезание в ArcGIS Pro.
Кроме того, вы можете удалить все листы кэша перед обновлением, но это может негативно сказаться на ресурсах сайта ArcGIS Server, если кеш большой.
Если ваши пользователи жалуются на то, что им приходится ждать, пока определенное место будет кэшировано по запросу после каждого обновления, добавьте это место в предварительно кэшируемую область. Если предварительное кэширование выполнено грамотно, кэширование по запросу будет выполняться редко, несистематично, в областях карты, не представляющих интереса для большинства людей. Если пользователи постоянно обращаются к одной и той же области на карте, она должна быть предварительно кэширована.
Обновляйте только те области кэша, в которых произошли изменения
Можно воспользоваться архивированием базы геоданных или пользовательским инструментом для отслеживания всех изменений, произошедших с момента последнего обновления, а затем экспортировать эти изменения в класс пространственных объектов и обновить листы на основе границы класса объектов.
Если вы уверены в том, что будут обновлены только измененные области, удалять листы, созданные по запросу, не нужно.