Как удалить все ребра из БД Microsoft Azure Cosmos, если стоимость запроса RU превышает лимит - PullRequest
0 голосов
/ 08 мая 2019

У нас есть граф в Azure Cosmos DB (Gremlin API) с приблизительно 3К вершинами и 16К ребрами.Я хотел бы отбросить все ребра, но сохранить вершины.

Когда я запускаю запрос 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 ()' показывают различную стоимость RU в проводнике данных Azure:

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

Каков оптимальный способ избавиться от краев (с точки зрения производительности и / или с точки зрения стоимости)

1 Ответ

0 голосов
/ 07 июля 2019

Когда вы выполняете запрос drop () , Космос фактически отбрасывает некоторые ребра, прежде чем выдает 429 «Частота запросов велика». Таким образом, вы можете повторить тот же запрос

g.E().drop()

до тех пор, пока вы не получите пустой результат (это означает, что запрос привел к успеху, и все ребра были отброшены).

Я пробовал отбрасывать ребра из обозревателя данных Azure в CosmosDB, и вот результат (предоставляется 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 попыток я получил [ ], что означало, что все ребра были отброшены. Так что повторная попытка до успеха может быть здесь некоторым решением.

...