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

有关 Azure Cosmos DB for Apache Gremlin 的常见问题解答

重要

你是否正在寻找一种数据库解决方案,以应对需要高扩展性、99.999% 可用性服务级别协议(SLA)、即时自动扩展和跨多个区域的自动故障转移的场景? 请考虑 Azure Cosmos DB for NoSQL

您是要构建联机分析处理(OLAP)图表,还是迁移现有的 Apache Gremlin 应用程序? 考虑 Microsoft Fabric 中的 Graph

Gremlin 查询

如何评估 Gremlin 查询的效率?

ExecutionProfile() 预览步骤可用于提供查询执行计划的分析。 此步骤需要添加到任何 Gremlin 查询的末尾。 例如,可以将该步骤添加到 g.V('example').out('relationship') 查询的末尾,结果为 g.V('example').out('relationship').executionProfile()

配置文件的输出显示获取顶点对象、边缘对象和工作数据集的大小所花费的时间。 此输出与 Azure Cosmos DB 查询的标准成本度量相关。

其他常见问题解答

在图形数据库上运行查询时如何针对每秒的 RU 数目收费?

所有图形对象、顶点和边缘都显示为后端中的 JSON 文档。 Gremlin 查询可以一次修改一个或多个图形对象,成本直接取决于查询处理的对象和边缘。 此过程的工作方式与所有其他 Azure Cosmos DB API 的工作方式相同。

RU 费用取决于遍历的工作数据集,而不是结果集。 请考虑一个示例,其中查询获取单个顶点作为结果,但需要遍历其他几个对象。 在此示例中,成本基于计算结果顶点所涉及的所有图形对象。

图形数据库在 Azure Cosmos DB for Apache Gremlin 中可以具有的最大规模是多少?

Azure Cosmos DB 使用水平分区来根据需要自动缩放存储和吞吐量。 容器中的分区数决定了其最大吞吐量和存储容量。 为了大规模获得最佳性能,请遵循 Gremlin 容器 API 的特定准则。 若要详细了解分区和最佳做法,请参阅 [Azure Cosmos DB 中的分区文章。

对于 C#/.NET 开发,我是否应使用 Microsoft.Azure.Graphs 包或 Gremlin.NET?

用于 Apache Gremlin 的 Azure Cosmos DB 使用开源驱动程序作为服务的主要连接器。 因此,建议的选项是使用 Apache 支持的驱动程序

如何使用 Gremlin 驱动程序防范注入式攻击?

大多数本机 Apache Gremlin 驱动程序允许提供参数字典以执行查询。 在Gremlin.Net库和gremlin (Node.js)库中都支持此功能。

为什么我收到“Gremlin 查询编译错误:找不到任何方法”错误?

Azure Cosmos DB for Apache Gremlin 支持 Gremlin 外围区域的子集。 有关支持的步骤的详细信息,请参阅 Gremlin 支持 文章。

若要解决此错误,请使用支持的步骤重写 Gremlin 查询,因为 Azure Cosmos DB 提供了所有重要的 Gremlin 功能。

为什么我收到“WebSocketException:当状态代码应为‘101’时,服务器返回了状态代码‘200’”错误?

正在使用不正确的终结点时,可能会引发此错误。

生成此错误的终结点具有以下模式: https://<account-name>.documents.azure.com:443/ 此终结点实际上是图形数据库的文档终结点。

要使用的正确终结点是 Gremlin 终结点,其格式如下: https://<account-name>.gremlin.cosmosdb.azure.com:443/

为什么会收到“RequestRateIsTooLarge”错误?

此错误表示,每秒分配的请求单位不足,无法为查询提供服务。 此错误在运行某个获取所有顶点的查询时出现:

g.V()

此查询尝试检索图中的所有顶点。 因此,此查询的成本至少等于请求单位(RU)的顶点数。 应调整每秒请求单位(RU/秒)设置,以解决此查询问题。

为何我的 Gremlin 驱动程序连接最终被删除了?

Gremlin 连接是通过 WebSocket 连接进行的。 尽管 WebSocket 连接没有特定的生存时间,但 Azure Cosmos DB for Apache Gremlin 将在 30 分钟不活动后终止空闲连接。

为什么在本机 Gremlin 驱动程序中不能使用 Fluent API 调用?

Azure Cosmos DB for Apache Gremlin 尚不支持 Fluent API 调用。 Fluent API 调用依赖于称为字节码支持的内部格式设置功能,Azure Cosmos DB for Apache Gremlin 目前不提供此功能。 因此,也不支持最新的 Gremlin-JavaScript 驱动程序。

如何查找查询的请求单位费用?

可以使用以下几种方法之一找到 Azure Cosmos DB for Apache Gremlin 查询的请求单位(RU)费用:

  • 使用 Azure 门户

    1. 登录到 Azure 门户

    2. 创建新的 Azure Cosmos DB for Apache Gremlin 帐户 并用数据填充它,或选择已包含数据的现有帐户。

    3. 转到 “数据资源管理器” 窗格,然后选择要使用的容器。

    4. 输入有效的查询,然后选择“ 执行 Gremlin 查询”。

    5. 选择 “查询统计信息 ”以显示所执行请求的实际请求费用。

  • 使用 .NET 软件开发工具包 (SDK)

    1. 运行查询以获取结果对象,其类型为 ResultSet<>ResultSet<dynamic> results = client.SubmitAsync<dynamic>("g.V().count()").Result;

    2. 使用 StatusAttributes 数组和 x-ms-request-charge 索引器从结果中提取请求费用: double requestCharge = (double)results.StatusAttributes["x-ms-request-charge"];

  • 使用 Java SDK

    1. 运行查询以获取结果为 ResultSet 类型的对象: ResultSet results = client.submit("g.V().count()");

    2. 使用 statusAttributes 方法和 x-ms-request-charge 密钥从结果中获取请求费用: Map<String, Object> attributes = results.statusAttributes(); Double requestCharge = (Double) attributes.get("x-ms-request-charge");

在 Gremlin 的 API 返回的响应标头中,可以在密钥 x-ms-request-charge 下找到请求费用信息。