发布并探索托管要素图层

首先,您直接在 Enterprise 门户中将霍氏蛙栖息地数据集发布为托管要素图层。 通过查看其属性,了解它如何响应客户端查询。 您将在门户中检查该图层的项目详细信息与设置,访问要素图层的 REST 端点,并进入管理员服务端点,从中识别与查询行为和缓存相关的服务级别属性。 在启用响应缓存之前,充分了解这些属性至关重要,因为并非所有托管要素图层或工作流都适合启用缓存。

发布托管要素图层

要启用响应缓存,需要通过 GeoJSON 文件创建一个托管要素图层。

  1. 下载青蛙栖息地数据

    示例数据为一个 GeoJSON 文件。

  2. 登录到您的 ArcGIS 组织账户
    注:

    如果您没有组织账户,请参阅软件访问权限选项

  3. 在功能区上,单击内容选项卡。

    “内容”选项卡

  4. 单击新建项目

    “新建项目”按钮

  5. 新建项目窗口中,单击要素图层

    “要素图层”选项

  6. 创建要素图层页面上,滚动到底部,然后单击上传文件

    “上传文件”选项

  7. 单击下一步
  8. 单击您的设备。 浏览至“下载”文件夹,选择 FrogHabitat.geojson,然后单击打开

    文件默认会下载到“下载”文件夹,当然您也可以指定其他保存位置。

  9. 新建项目页面上,添加以下信息:
    • 对于标题,保留当前标题 FrogHabitat
    • 对于标签,依次输入 biodiversityfrogshabitat,每输入一个按一次 Tab 键。
    • 对于摘要,输入或复制粘贴以下内容:This hosted feature layer stores the protected habitat river lines for the endangered frog species in New Zealand.

    新建项目属性

  10. 单击保存

    随即显示该托管要素图层的项目详细信息页面。

    项目详细信息页面

    接下来,您需要设置共享属性,使所有人都能访问此要素图层。

  11. 单击共享

    “共享”按钮

  12. 共享窗口中,单击所有人(公共)

    选中“所有人(公共)”选项的“共享”窗口

    对于本用例这种旨在供外部受众访问的保护数据,选择公共共享级别是合适的。

  13. 单击保存

探索属性

接下来,您将探索新发布的托管要素服务在 Enterprise 中的各项属性,了解哪些设置控制着图层响应客户端请求的方式。

  1. 在 FrogHabitat 要素图层的详细信息页面上,对于 URL,单击查看按钮。

    服务 URL 对应的“查看”按钮

    随即打开 ArcGIS REST 服务目录页面,即该服务 REST 端点的 HTML 视图。

    “ArcGIS REST 服务目录”页面

  2. 图层下,单击线

    “图层”下的“线”选项

    随即显示该单个图层的 REST 端点 HTML 视图。

    线图层的属性

    在此粒度级别,您可以控制具体哪些图层会将响应缓存内容写入对象存储。 接下来,您将探索该图层的配置信息。

  3. 在页面顶部路径下,单击的 JSON 链接。

    JSON 链接

    此页面显示了该图层的全部配置信息。 您将使用 Windows 搜索功能查找特定命令。

  4. 在键盘上按 Ctrl + F 组合键,打开搜索框。

    搜索框

  5. 在搜索框中,输入 editingInfo

    搜索 editingInfo 的结果

    您输入的文本会在页面上自动高亮显示。

    该图层包含最后一次编辑的时间戳。 记录上次编辑日期非常重要,这可以确保客户端不会使用过时的、未能反映最新编辑内容的缓存响应。 由于对图层的任何编辑都会使现有缓存响应失效,因此缓存功能对于不常编辑的图层效果最佳。

  6. 搜索 supportsQueryWithCacheHint 属性。

    搜索 supportsQueryWithCacheHint 的结果

    此属性的值为 false,表示该图层尚未启用查询响应缓存。

您已使用 GeoJSON 文件在 Enterprise 门户中直接发布了托管要素图层。 您通过访问要素服务的 REST 端点,确认了它会跟踪数据的最后编辑日期,但尚未启用响应缓存功能。 接下来,您将开启这一功能。


为图层启用查询响应缓存

接下来,您将 supportsQueryWithCacheHint 属性设为 true,从而为 FrogHabitat 托管要素图层启用响应缓存。 启用后,Enterprise 在从关系存储中获取查询结果后会将该响应缓存到对象存储中。 由于从对象存储提供缓存的响应比查询关系存储效率更高,因此响应缓存能够优化托管要素图层的性能。

由于这种效率提升只有在同一查询被重复执行时才能体现,所以响应缓存最适合那些用户会反复提交相同查询的场景。

启用响应缓存

您可以通过将 supportsQueryWithCacheHint 属性设置为 true 来启用响应缓存。 updateDefinition 操作可用于更新要素服务图层中的定义属性。

  1. 在浏览器中,确保显示线图层 HTML 视图的选项卡已打开。

    线图层的 HTML 视图

    要使用 updateDefinition 操作,必须先访问图层管理员资源。 这只需在 URL 中添加 admin 即可实现。

  2. 在浏览器选项卡的地址栏中,将 rest/services 替换为 rest/admin/services

    添加了 admin 后的 URL

  3. Enter 键。

    服务的管理员页面

    随即显示管理员页面。

  4. 在页面底部,单击更新定义

    “更新定义”选项

  5. 对于输入,复制粘贴以下 JSON 代码片段:
    {
                     "layerCache": {
                         "enabled": true,
                         "expiration": 1
                     }
    }

    “更新定义”参数

    注:

    参考图中所示的缩进格式进行匹配。

    这段代码的作用是将图层缓存设为 true,并设置一个过期时间,定义缓存在被清除前保留的天数。 过期属性值以天为单位,这里设置一天后,该图层的任何缓存响应都将失效。 值设置得越大,缓存的响应保留时间就越长。 相应地,缓存响应的数量也会越多,占用的磁盘空间也就越大。

  6. 单击 updateDefinition

    updateDefinition 按钮

    JSON 响应确认操作成功。

    操作成功消息

  7. 切换回显示图层属性 JSON 视图的浏览器选项卡,并刷新页面。
  8. 搜索 supportsQueryWithCacheHint 属性。

    supportsQueryWithCacheHint 设为 true

发出使用响应缓存的请求

当图层启用了响应缓存后,了解这一机制的客户端通常会专门构造查询来利用它。 这类客户端包括 ArcGIS ProMap Viewer 以及使用 ArcGIS Maps SDK for JavaScript 构建的应用程序。 但是,并非所有查询都会这样构造,特别是由其他客户端发起的查询。 有关如何构造能使用响应缓存的请求的文档,请参阅 ArcGIS Enterprise 中的托管要素服务图层的响应缓存

您将使用在 ArcGIS Notebooks 中创建的笔记本,模拟用户向服务发送请求,看看请求需要如何构造才能使用响应缓存。

  1. 返回到显示更新定义的浏览器选项卡。

    “更新定义”页面

  2. 在 URL 中,将 rest/admin/services 替换为 rest/services(同时删除 admin),并删除末尾的 updateDefinition,然后按 Enter 键。

    通过移除 admin 和 updateDefinition 更新后的 URL

    随即将返回 ArcGIS REST 服务目录页面。

    “ArcGIS REST 服务目录”页面

  3. 滚动至页面底部并单击查询

    “查询”选项

    任何客户端对此服务发起的查询请求,都会经过这个查询端点。 您将在笔记本中使用这个端点来发送自动化请求。

  4. 复制当前查询页面的 URL。
  5. 启动 ArcGIS Pro。 如果收到系统提示,请使用您获得许可的 ArcGIS 组织账户登录。
    注:

    如果您没有 ArcGIS Pro 的访问权限或者 ArcGIS 组织账户,请参阅软件访问权限选项

    打开 ArcGIS Pro 后,您可以选择创建新工程或打开已存在的工程。 如果您之前创建了一个工程,您将看到一个最近工程列表。

  6. 新建工程下,单击从没有模板的情况入手

    “从没有模板的情况入手”选项

  7. 下载 printResponseInfo 笔记本。
  8. 在功能区的插入选项卡上,单击新建笔记本旁边的下拉箭头,然后选择添加并打开笔记本

    “添加并打开笔记本”选项

  9. 浏览至用于保存 printResponseInfo.ipynb 的文件夹,选择 printResponseInfo.ipynb,然后单击确定

    笔记本随即打开。 选择第一个代码单元格并运行它。

    “打印响应信息”笔记本

  10. 在笔记本中,选中第一个代码单元格,然后单击运行按钮。

    被选中运行的笔记本代码单元格

    注:

    也可以按 Ctrl+Enter 运行选中的代码块。

  11. 在第二个代码单元格中,将第 1 行的 queryURL 值替换为您为服务复制的查询 URL。

    代码单元格中的 queryURL

    确保 URL 加引号。

  12. 运行第二个代码单元格。

    状态代码 200

    响应中包含以下值:

    • 状态代码 - 表示请求是否成功,值为 200 即代表成功
    • 日期 - 请求发出的日期和时间
    注:

    如果状态代码值不是 200,请确认您提供的 queryURL 值是否正确。

    接下来,多次运行第二个单元格,观察响应的变化。

  13. 多次运行第二个单元格。

    对于日期,日期不变,时间会变;但除此之外,每次返回的响应信息都完全相同。 这说明每次查询时,数据都是从关系存储中重新检索的。

  14. 将第 2 行改为 resultType = "tile",然后运行一次该单元格。

    resultType = "tile" 代码行

    这次返回的响应信息与之前的请求类似。 此请求的数据同样来自关系存储。 但与之前请求不同的是,因为这次请求中使用了 resultType = "tile",所以响应结果被缓存到了对象存储中。

  15. 再次运行这个单元格。

    包含 x-esri-ftiles-cache-compress: true 的响应

    这次响应中多了一个标头 x-esri-ftiles-cache-compress: true。 这表明,本次响应的数据来源于上一个请求缓存在对象存储中的结果。 这样一来,就无需再对关系存储发起新查询了。

    如果您没有看到 x-esri-ftiles-cache-compress 标头,请确认您已在图层上启用了查询响应缓存,并且第 2 行设置为 resultType = "tile"

  16. 接下来,将第 3 行改为 cacheHint = "true",然后运行一次该单元格。

    cacheHint = "true" 代码行

    此次返回的响应与最初的查询类似。 这是一个与上一个请求不同的查询,与之前缓存的任何响应都不匹配,因此需要针对关系存储执行新的查询才能返回响应。 但同时,因为请求中使用了 cacheHint = "true",这次查询的响应也被缓存到了对象存储中。

    注:

    resultType = "tile"cacheHint = "true" 并不强制要求同时使用。 单独使用其中任何一个,都足以让请求利用响应缓存。

  17. 再次运行这个单元格。

    这次的响应中包含了一个新的 x-esri-cache-hint-features: true 标头。 这表明响应来自对象存储中缓存的值。

    x-esri-cache-hint-features: true 响应

    接下来,您将更改要素数量值,看看响应会受到什么影响。

  18. 将第 4 行的 numFeatures 值改为 5,然后运行单元格。

    numFeatures 设为 5

    由于查询再次发生变化,没有相应的已缓存响应可用。 从缺少 x-esri-ftiles-cache-compress: truex-esri-cache-hint-features: true 标头可以判断,数据依然来自对关系存储的查询。

  19. 再次运行这个单元格。

    更改要素数量后的响应

    现在,响应中包含 x-esri-cache-hint-features: true 标头,表明服务这次返回的是上一个请求缓存在对象存储中的值。

    因此,使用响应缓存需要 resultType = "tile"cacheHint = "true" 参数。 当用户向一个已启用响应缓存的图层发送带有上述任一参数的请求时,如果响应数据已有缓存,将直接从对象存储返回。 如果尚未缓存,系统会执行一次新的关系存储查询,并将响应缓存到对象存储中。 在缓存过期之前,如果有任何用户再次发起完全相同的请求,数据都会直接从对象存储获取,而无需重新查询关系存储。

通过启用查询响应缓存,该组织在向公众广泛开放霍氏蛙栖息地数据的同时,有效避免了对自身 ArcGIS Enterprise 基础设施造成不必要的压力。 随着公众对保护工作的关注度不断提高,将有更多用户访问基于这些数据构建的地图、应用程序和仪表板。现在,这些重复性的查询可以从对象存储中高效获取,不再依赖关系存储。 这使得该组织既提升了数据的公众可见度,又优化了该托管要素层的资源利用率。

您可以在教程库中找到更多教程。