大数跨境

元字段集更新的动态复杂性成本

元字段集更新的动态复杂性成本 Shopify电商独立站
2026-09-15
1
导读:metafields Set 突变现在采用动态复杂度计费。不再对每次调用收取固定费用,请求的费用会根据 metafield 被更改的不同资源数量来反映。大多数应用无需进行任何更改,因为更新单个资源的成

metafieldsSet 突变现在使用动态复杂度计费,不再对每次调用收取固定费用,请求的费用反映了更改了多少个不同的资源元字段。大多数应用无需进行任何更改,因为更新单个资源的成本仍然很低。但在许多不同所有者上设置大量元字段的应用可能会更快地达到速率限制。建议应用按不同资源批量写入元字段。

变更内容

以前,每次 metafieldsSet 调用都收取固定的 10 api 点数 费用,无论它触及多少个元字段或资源。

现在费用计算方式如下:

费用 = 基础费用(10)+ 您的变更中每种不同资源所有者类型的费用之和。

对于每种不同的资源所有者类型,其费用为(该类型的不同资源数量 * 该所有者类型的权重)。

所有者类型 权重
Order 10
Product 4
ProductVariant 2
Collection 1
Customer(包括 CustomerSegmentMember) 1
Shop 1
其他所有所有者类型 0

每次变更调用中,每个所有者仅计算一次,无论您为其设置多少个 metafield。在一个产品上设置 10 个 metafield 的费用与设置一个相同。

由于 metafieldsSet 每个突变最多接受 25 个元字段,因此单次 metafieldsSet 调用的最高可能费用为 260 点(25 个类型为 Order 的不同资源加上 10 点的基础费用)。


注意: 费用是按 metafieldsSet 调用计算的,而不是按请求计算的。如果您使用 shopify.dev/docs/apps/build/graphql/basics/advanced#make-multiple-queries-in-one-request">GraphQL 别名 在单个请求中发送多个 metafieldsSet 突变,则每个别名都会收取 10 点的基础费用,且别名之间不会去重所有者。一个包含三个别名并更新相同 25 个不同订单的请求费用为 780 点 3 × (10 + 25 × 10)。


示例

此请求写入两个产品和一个变体:

mutation { metafieldsSet(metafields: [ { ownerId: "gid://shopify/Product/1", namespace: "custom", key: "a", type: "single_line_text_field", value: "a" }, { ownerId: "gid://shopify/Product/1", namespace: "custom", key: "b", type: "single_line_text_field", value: "b" }, { ownerId: "gid://shopify/Product/2", namespace: "custom", key: "a", type: "single_line_text_field", value: "c" }, { ownerId: "gid://shopify/ProductVariant/9", namespace: "custom", key: "a", type: "single_line_text_field", value: "d" } ]) { metafields { key } userErrors { field message } } }

它具有两个不同的 Product 所有者(Product/1 的两个输入计为一次)和一个不同的 ProductVariant 所有者,因此其费用为 10 + (2 × 4) + (1 × 2) = 20 点。

请求 之前成本 新成本
1 个产品上的 5 个元字段 10 14
2 个产品和 1 个变体各 1 个元字段 10 20
25 个元对象上的 25 个元字段 10 10
25 个订单各 1 个元字段 10 260

受影响对象

此更改适用于 Admin GraphQL API 中调用 metafieldsSet 突变的所有应用。进行高容量、跨所有者请求(例如,在一个请求中更新 25 个不同的订单)的应用将看到查询成本增加,并可能更快地消耗其 API 速率限制配额。仅更新单个资源或使用权重为 0 的所有者类型的对其 API 消耗影响最小。

为何重要

写入操作返回后,设置元字段的工作并未结束。对于每个发生变化的独立资源,Shopify 都会执行不同的后台工作。这些工作的量取决于请求触及的独立资源数量,而非设置的元字段数量。

在固定费用下,在一个请求中为 25 个不同产品设置 25 个元字段的请求与在一个产品上设置单个元字段的请求费用完全相同,尽管前者产生的下游工作量是后者的 25 倍。高扇出 metafieldsSet 流量的突发给系统基础设施带来了过大压力,导致共享该基础设施的每个应用和商店的元字段写入和其他 API 流量变慢。

按独立资源定价可将应用消耗的点数与其请求实际产生的工作量相匹配。

该怎么做

大多数应用无需进行任何更改。对单个资源或权重为 0 的资源发起的写入请求,成本在 10 到 20 点之间。

如果您的应用以高频率写入元字段,请遵循以下优化策略:

  1. 按所有者分组元字段:同一资源的额外元字段是免费的,因此在一个调用中设置某个产品的所有元字段比每个元字段单独调用更便宜。
  2. 不要拆分高扇出调用以降低费用:每次调用都要支付 10 点基础费用,因此将一个请求拆分为 25 个针对 25 个订单的请求,总费用会更高而不是更低。
  3. 检查您被收取的费用:读取响应中的 extensions.cost 字段。发送 Shopify-GraphQL-Cost-Debug=1 标头以获取每个字段的详细分解。
  4. 处理节流:当返回 THROTTLED 时,退避并重试。

相关文档

  • GraphQL Admin API 速率限制
  • 使用 GraphQL Admin API 管理元字段
  • 元字段限制
【声明】内容源于网络
0
0
Shopify电商独立站
1234
内容 7146
粉丝 0
Shopify电商独立站 1234
总阅读87.4k
粉丝0
内容7.1k