Кэширование карт по запросу
ArcGIS позволяет создавать по запросу кэшированные листы карт по мере их просмотра пользователями. Первый пользователь, который заходит в область, отсутствующую в кэше, вынужден ждать полной прорисовки листов сервером. Затем листы добавляются в папку кэша на сервере и остаются там, пока их не обновит или не удалит администратор сервера. Это означает, что последующие посетители этой области не должны будут дожидаться воссоздания листа.
При грамотном использовании кэширование по запросу может сэкономить много времени и места на диске. На многих картах, особенно в крупных масштабах, отображаются пустые, непригодные для использования и вообще ненужные пользователю области. Кэширование по запросу позволяет исключить ненужные листы, которые не будут прорисовываться и сохраняться, но при этом у пользователя будет возможность в любой момент просмотреть эти области в случае необходимости.
Несмотря на то что кэширование по запросу безусловно является полезной функцией, ее использование может негативно повлиять на производительность при ненадлежащем или чрезмерном использовании. В этом разделе содержатся советы по эффективному использованию кэширования по запросу.
Оптимизация работы
Одним из достоинств полного кэширования карты является то, что вы сможете быстро предоставлять красивые и сложные карты, поскольку сервер будет выдавать изображение карты по листам, а не прорисовывать всю карту целиком при каждом обращении к ней. Тем не менее при кэшировании по запросу сервер будет вынужден динамически прорисовывать листы при обращении пользователей к областям, которые не содержатся в кэше. Динамическая прорисовка занимает больше времени, чем выполнение обычного запроса, так как сервер создает несколько листов сразу. Размер листов будет 2048 x 2048 пикселей, если картографический сервис использует функцию сглаживания. В противном случае размер листов будет составлять 4096 x 4096 пикселей.
Почему сервер не может создавать каждый раз по одному листу? В таком случае появилось бы слишком много дублирующих друг друга надписей, так как механизм надписей не сможет определять надписи на соседних листах. Следовательно, сервер создаст сразу группу листов и вам нужно будет подготовить карту к прорисовке обширных областей с приемлемой скоростью. В этом разделе рассматривается несколько способов, позволяющих сократить производственные затраты на кэширование по запросу.
Где использовать кэширование по запросу?
При конфигурировании кэширования по запросу наиболее важно определить, какие области будут создаваться по запросу, а какие нужно предварительно кэшировать. Запрещается использовать кэширование по запросу для построения всего кэша. Настоятельно рекомендуется предварительно создать некоторые листы в областях карты, к которым пользователи будут обращаться наиболее часто, чтобы свести к минимуму вероятность того, что пользователи будут кэшировать эти листы по запросу, загружая тем самым сервер.
Как определить, какие области карты будут самыми востребованными? Это зависит от назначения карты и целевой аудитории. На общей базовой карте скорее всего чаще будут просматривать густозаселенные места, дороги, прибрежные зоны, парки и другие достопримечательности.
На тематических картах популярностью могут пользоваться другие области. Например, сотрудники горнодобывающих компаний будут чаще просматривать на картах области скопления горных разработок. Эти области располагаются в незаселенных горных районах, которые не представляют интереса для большинства людей.
Чтобы определить области, требующие предварительного кэширования, изучите поведение пользователей на имеющихся у вас картах либо в сети, либо на компьютере. Вы можете узнать много полезного, проанализировав навигацию пользователей и объекты их запросов.
Объем данных, имеющихся в наличии, и их подробность также важны. Если данных немного или их просто нет для некоторых областей, эти области можно пропустить. Даже если кто-то затребует этот лист, на его прорисовку будет затрачено немного времени, если на этом листе и так ничего нет.
Данные должны иметь непосредственное отношение к назначению карты. Например, если вы работаете в транспортном отделе компании, вам наверняка понадобится предварительно кэшировать области, на которых много автомобильных и железных дорог. Для определения областей с высокой плотностью интересных объектов можно использовать такие средства пространственного анализа, как Плотность ядер (Kernel Density).
Определив популярные области, создайте класс пространственных объектов, чтобы изолировать эти области от других. На этот класс будет ссылаться инструмент Управление листами кэша картографического сервера (Manage Map Server Cache Tiles), чтобы убедиться, что созданы только листы, находящиеся в пределах границ класса пространственных объектов.
Можно последовательно использовать несколько инструментов в модели или скрипте для формирования такого класса объектов наиболее востребованных мест. Модель может содержать несколько вариантов ввода для потенциально популярных пространственных объектов, а также позволяет строить буферы объектов, определять их плотность и, наконец, выполнять постобработку на выходе, чтобы обеспечить формирование такого класса объектов, который можно будет эффективно использовать в качестве шаблона при кэшировании. Например, можно использовать инструмент Упростить полигоны (Simplify Polygon) для удаления лишних вершин, которые могут замедлить работу инструментов кэширования.
Чем больше популярных областей карты удастся изолировать, тем больше запросов вы сможете обслужить с помощью предварительно кэшированных листов, избегая создания их по запросу. Для крупных масштабах достаточно кэшировать небольшой фрагмент карты, чтобы обработать большинство запросов пользователей. Сэкономленное время и место на диске можно использовать для стратегического кэширования карты в других масштабах.
Тестирование и оптимизация карты
Многие организации работают со сложными картографическими документами, изначально предназначенными для их использования настольными ГИС. Эти карты необходимо дополнительно подготовить, чтобы обеспечить их быструю работу, на которую рассчитывают пользователи Интернета.
Прежде чем изменять карту, вы можете создать тестовый кэш для небольшой области, чтобы получить базовые значения. Выберите область, в которой были бы представлены все типы местности на вашей карте: городская и сельская, равнинная и холмистая и т.д. Запишите время, потраченное на создание кэша. Включите кэширование по запросу и увеличьте масштаб отображения области, которой не было в кэше. Запишите, сколько потребовалось времени для загрузки листа в разных масштабах. Если производительность приемлема, можно на этом завершить оптимизацию.
Если вы захотите оптимизировать воспроизведение листов по запросу еще больше или увеличить общую скорость создания кэша, вам потребуется Редактор сервисов (Service Editor), которое позволит определить и устранить недостатки, влияющие на производительность процессов, выполняемых с данной картой. Кнопка Анализировать (Analyze) запускает поиск потенциальных проблем с производительностью и создает отчет о них. Кнопка Предварительный просмотр (Preview) позволяет оценить скорость динамической прорисовки карты.
Чтобы отследить более мелкие структуры, снижающие эффективность картографического сервиса, измените на сервере уровень регистрации на Подробный (Verbose). Выполните один запрос к сервису, например, увеличьте масштаб до уровня закладки в ArcMap. Затем проанализируйте журналы ArcGIS Server в Менеджере и сравните время прорисовки для каждого слоя. Вы сразу поймете, какие слои прорисовываются дольше других. Рекомендуется повторить эту операцию для разных областей карты, кэшированных в разных масштабах. По завершении не забудьте установить для отчетности прежний уровень, поскольку на Подробном (Verbose) уровне в журнал записывается больше информации, чем обычно.
После оптимизации карты выполните еще одно тестовое кэширование и запишите, сколько времени заняло создание листа по запросу. Если производительность вас не удовлетворяет, воспользуйтесь одним из следующих советов:
- Выполните предварительное кэширование большей области. Это снизит вероятность запроса на воспроизведение листа, отсутствующего в кэше. Можно разрешить кэширование по запросу только для самых пустынных областей и для самых крупных масштабов. В таком случае одновременно прорисовываться будут лишь несколько объектов.
- Создайте полный кэш Если выполнить предварительное кэширование для всех файлов, вам не потребуется создавать листы по запросу. Если позволяют время и объем жесткого диска, создание полного кэша представляется лучшим вариантом, при условии что он не будет постоянно обновляться. Если вы не можете позволить себе занимать сервер задачами кэширования, можно запрограммировать их выполнение на ночные часы или на выходные дни, чтобы кэш заполнялся постепенно. Можно занять кэшированием один из экземпляров сервера, а другие экземпляры будут обслуживать пользовательские запросы.
- Используйте динамически прорисованный сервис. Если создать полный кэш невозможно, а система работает удовлетворительно и с динамически прорисованным сервисом, кэширование можно не выполнять совсем. В таком режиме производительность не будет оптимальной, зато у вас всегда будут самые последние данные.
Отчеты о состоянии и листы, созданные по запросу
Следует помнить о том, что листы карты, созданные по запросу, не включены в отчет о статусе кэша, который отображается в ArcGIS for Desktop. Этот отчет служит для отслеживания только тех листов, которые были созданы с использованием инструментов кэширования.
Обновление листов
Если вы отредактировали исходную базу данных, необходимо обновить кэш, чтобы пользователи увидели изменения. Если вы выбрали вариант с предварительным кэшированием областей карты на основе класса пространственных объектов и заполнением остального пространства кэша по запросу, необходимо тщательно проверить, чтобы обновления были отражены во всех областях.
Есть два способа обновления кэша, если вы создавали листы по запросу:
Можно удалить все листы, которые создавались по запросу, перед выполнением обновления
Если вы создаете листы по запросу, скорее всего вы выполняли предварительное кэширование конкретной области с использованием класса пространственных объектов. Обычно при обновлении используется тот же самый класс пространственных объектов, а листы, загруженные по запросу, устаревают, если их не удалить.
Чтобы удалить листы, запустите инструмент Управление листами кэша картографического сервера (Manage Map Server Cache Tiles) в режиме удаления листов (Delete Tiles). Для удаления листов необходимо использовать маску, исключающую подмножество класса пространственных объектов, по которому выполнялось предварительное кэширование. Можно с помощью средств редактирования ArcGIS создать полигон, соответствующий полному экстенту вашей карты, и вырезать в нем область, соответствующую той, которая была предварительно кэширована. Получившийся полигон с внутренней пустой областью будет соответствовать территории, в пределах которой надо удалить все листы. Инструкции по вырезанию области в полигоне с помощью команды вырезания (Clip) см. в разделе Вырезание отверстий в полигонах.
Вы также можете удалить все листы из кэша перед обновлением, но если кэш большой, это может занять много времени.
Если вы опасаетесь, что пользователям придется долго ждать завершения кэширования того или иного листа по запросу после каждого обновления, это место лучше добавить в предварительно кэшируемую область. Если предварительное кэширование выполнено грамотно, кэширование по запросу будет выполняться редко, несистематично, в областях карты, не представляющих интереса для большинства людей. Если пользователи постоянно обращаются к одной и той же области, она должна быть предварительно кэширована.
Обновляйте только те области кэша, в которых произошли изменения
Можно воспользоваться архивированием базы геоданных или пользовательским инструментом для отслеживания всех изменений, произошедших с момента последнего обновления, а затем экспортировать эти изменения в класс пространственных объектов и обновить листы на основе границы класса объектов.
Если вы уверены в том, что будут обновлены только измененные области, удалять листы, созданные по запросу, не нужно.