Альтернатива / как CreateStoredProcedureIfNotExists в CosmosDb? - PullRequest
0 голосов
/ 12 декабря 2018

Я использую Microsoft.Azure.Documents.Client 2.x, но, похоже, нет кода API для выполнения CreateStoredProcedureIfNotExists, , как это обычно бывает для других операций .

Есть ли вариант лучше, чем игнорировать Exception Я получу, если он уже существует?(если он не существует, я хочу создать его - я не вижу смысла в выполнении запроса для подтверждения необходимости перед тем, как начать, учитывая, что моим следующим действием будет создание Create [с условием гонки вдело конкурирующих писателей])

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я закончил с:

let private createStoredProcedureOrIgnore (client: IDocumentClient) (collectionUri: Uri) (name, body): Async<float> = async {
    try let! r = client.CreateStoredProcedureAsync(collectionUri, StoredProcedure(Id = name, Body = body)) |> Async.AwaitTaskCorrect
        return r.RequestCharge
    with DocDbException ((DocDbStatusCode sc) as e) when sc = System.Net.HttpStatusCode.Conflict -> return e.RequestCharge }
let createStoredProcIfNotExists (log: ILogger) client collUri (sprocName,sprocBody) = async {
    let! t, ru = createStoredProcedureOrIgnore client collUri (sprocName,sprocBody) |> Stopwatch.Time
    log.Information("Created stored procedure {sprocId} rc={ru} t={ms}", sprocName, ru, (let e = t.Elapsed in e.TotalMilliseconds)) }

RC - 1.67 для Conflict и 6.67 для не существующего случая для моего случая

0 голосов
/ 12 декабря 2018

Внутренний SDK, когда вы используете методы IfNotExists, будет делать то же самое для вас (обработать исключение и создать элемент для вас), поэтому они возвращают объект Resource в ответе,Потому что они читают его.

Вы можете просто создать метод расширения для IDocumentClient, который делает именно это, и использовать этот метод вместо этого, чтобы сохранить ваш код чистым.

Это прямойв любом случае, прочитайте документ размером менее 1 КБ, поэтому вам придется заплатить только один RU за эту операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...