0

我们在 Azure Cosmos DB (Gremlin API) 中有一个大约 3K 顶点和 16K 边的图。我想删除所有边但保留顶点。

当我运行 gremlin 查询时,q.E().drop()我得到了异常

ExceptionType : RequestRateTooLargeException ExceptionMessage : Message: {"Errors":["Request rate is large"]}

当前 RU/s 限制为 3000 RU/s

我了解引发此类错误的机制。“等待并重试”在这里不是一个选项 - 单个查询而不是多个查询超出了限制,所以下次我在等待一段时间后运行它时,我也会得到同样的异常。

问题是我必须使用哪些选项以尽可能少的查询来删除所有边缘?

我试图运行q.E().limit(20).drop(),它工作并报告 237.62999999999994 RU

当我运行时,q.E().limit(2000).drop()我得到了异常。

'gE().limit(1).drop()' 结果显示 Azure 数据资源管理器中不同的 RU 成本:

Executed: g.E().limit(1).drop() (61.72 RUs)
Executed: g.E().limit(1).drop() (53.14 RUs)
Executed: g.E().limit(1).drop() (61.72 RUs)
Executed: g.E().limit(1).drop() (56 RUs)

但不断的请求费用:546.38

摆脱边缘的最佳方法是什么(就性能和/或成本而言)

4

1 回答 1

1

当您运行drop()查询时,Cosmos 实际上在抛出 429“请求率很大”之前丢弃了一些边。因此,您可以重试相同的查询

g.E().drop()

直到你得到空结果(意味着查询成功并且所有边都被删除了)。

我尝试从 CosmosDB 中的 Azure 数据资源管理器中删除边缘,结果如下(最初预置 400 RU,329 个边缘):

g.E().count() => [329]
g.E().drop() => "Request rate is large"
g.E().count() => [282]

在连续的drop()尝试中,丢弃了 47、67、38、75、75 和最后 27 个边缘。经过 6 次尝试后,我得到[ ]了所有边缘都被丢弃的意思。所以重试直到成功可能是这里的一些解决方案。

于 2019-07-07T17:21:17.330 回答