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