你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Cosmos DB for NoSQL 全局辅助索引(预览版)

重要

Azure Cosmos DB for NoSQL 全局辅助索引目前为预览版。 此预览版在提供时未使用服务级别协议。 目前,不建议对生产工作负荷使用全局辅助索引。 此预览版的某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

全局辅助索引通过存储具有不同分区键的数据来提高查询效率。 全局辅助索引是自动与源容器同步的只读容器,维护其数据的持久副本。 每个索引容器都有自己的设置,不同于源容器,包括分区键、索引策略、请求单位(RU)限制和数据模型,可以通过选择特定的项属性来自定义这些设置。

用例

应用程序通常需要使用分区键以外的属性查询数据。 这些查询必须跨所有分区执行,即使某些分区不包含与筛选条件匹配的数据。 因此,不包含分区键的查询消耗更多的 RU,并且延迟更高。

使用全局二级索引,您可以:

  • 使用不同的分区键存储数据,以将源容器上的跨分区查询转换为单分区查找。
  • 将全局辅助索引添加到现有容器,使查询在应用程序需要更改时保持高效。
  • 隔离您的工作负荷的一个子集,例如在全局辅助索引中创建矢量或全文搜索索引,同时不影响对源容器的事务操作。

全局辅助索引优势

Azure Cosmos DB 全局辅助索引具有以下优势:

  • 自动同步:索引容器自动与源容器同步,无需在客户端应用程序中使用自定义逻辑。
  • 最终一致性:索引容器最终与源容器保持一致,不会影响源中的写入延迟。
  • 性能隔离:索引容器有自己的存储和 RU 限制,可提供性能隔离。
  • 优化读取性能:微调的数据模型、分区键和索引策略,以便优化读取性能,并支持使用丰富的 NoSQL 查询语法的查询。
  • 改进的写入性能:与多容器写入策略相比,客户端只需写入源容器,从而提高了写入性能。
  • 只读容器:对索引容器的写入是异步的,并且会自动进行管理。 客户端应用程序不需要直接写入索引容器。
  • 多个索引:可以为同一源容器创建多个索引容器,而无需额外的开销。

定义全局辅助索引

创建全局辅助索引类似于创建新容器,添加的属性用于指定源容器和定义全局辅助索引数据模型的查询。 容器的许多自定义项也适用于全局辅助索引容器,包括自定义索引、矢量和全文搜索策略。 全局辅助索引容器必须使用自动缩放吞吐量,这有助于它们响应流量峰值,而不会受到限制或落后于源容器中的更新。

在全局辅助索引中,每个项与源容器中的一项一对一对应。 为了维护此映射, id 全局辅助索引项中的字段会自动填充。 源容器中的值id在索引容器中表示为_id

用于定义全局辅助索引的查询必须遵循以下约束:

  • SELECT 语句只允许对 JSON 树中的一个级别的属性进行投影,也可以使用 SELECT * 来包含所有属性。
  • 不支持使用 AS 作为属性名称的别名。
  • 查询不能包含 WHERE 子句或其他子句,例如 JOIN、DISTINCT、GROUP BY、ORDER BY、TOP、OFFSET LIMIT 和 EXISTS。
  • 不支持系统函数和用户定义的函数 (UDF)。

例如,有效的查询是:SELECT c.userName, c.emailAddress FROM c从源容器userName中选择emailAddressc属性。 此查询定义全局辅助索引的数据模型,确定每个项的索引容器中包含哪些属性。 创建源容器和定义查询后无法更改。

了解如何创建全局辅助索引。

小窍门

如果要删除源容器,必须先删除为其创建的所有全局辅助索引。

同步全局辅助索引

全局辅助索引容器使用更改源自动与源容器中的数据更改保持同步。 为源容器定义全局辅助索引时,会为你创建和管理更改源作业。 更改以异步方式反映到索引容器中的数据,不会影响对源容器的写入。 无论为帐户设置的 一致性级别 如何,索引容器最终都与源容器保持一致。

更改源从源容器读取使用 RU,并且从索引容器写入全局辅助索引使用 RU。 在两个容器上预配的 RU 决定了索引的冻结和同步速度。

多区域帐户中的全局辅助索引

对于具有单个区域的 Azure Cosmos DB 帐户,更改源从源容器读取以及全局辅助索引容器写入都发生在该区域中。 在具有单个写入区域的多区域帐户中,更改源读取和全局辅助索引写入发生在写入区域中。 在具有多个写入区域的帐户中,更改源读取和全局辅助索引写入会在其中一个写入区域内进行。 如果帐户存在故障转移,则更改源读取和全局辅助索引写入发生在新的写入区域中。

查询全局辅助索引

从全局辅助索引查询数据类似于从任何其他容器查询数据。 可以使用完整的丰富 Azure Cosmos DB for NoSQL 查询语法对全局辅助索引容器执行查询。 这包括矢量、全文搜索和混合搜索查询。 与其他容器类似,应根据查询模式优化全局辅助索引容器的 索引策略

由于全局辅助索引可以具有与源容器不同的分区键,因此对全局辅助索引执行可能跨分区查询更高效,从而节省延迟和 RU。

监测

可以通过 Azure 门户中指标中的全局辅助索引捕获差距(分钟)指标监视生成全局辅助索引时的滞后时间。 若要了解这些指标,请参阅 Microsoft.DocumentDB/DatabaseAccounts 支持的指标

屏幕截图显示了 Azure 门户“指标”页中的全局辅助索引同步时差(分钟)指标。

排查常见问题

我想了解源容器和索引容器之间的滞后时间

全局辅助索引同步时差(分钟)指标显示源容器与全局辅助索引容器中的数据之间的最大差异(以分钟为单位)。 若要查看单个索引容器的滞后,请选择应用拆分,然后选择按照...拆分,再选择GlobalSecondaryIndexName

我想了解我的全局辅助索引容器是否有足够的 RU

在源容器和索引容器上预配的 RU 会影响传播到全局辅助索引容器的更改速率。 检查“规范化 RU 消耗量”指标,如果过高,则容器可能需要增加最大 RU

局限性

Azure Cosmos DB for NoSQL API 全局辅助索引功能存在一些限制。

  • 必须先在帐户上启用连续备份,然后才能启用全局辅助索引。
  • 全局辅助索引容器不会在帐户还原过程中自动还原。 还原过程完成后,必须在还原的帐户上启用全局辅助索引功能。 然后,可以再次创建全局辅助索引。

后续步骤