Cosmos DB .NET 3.0 SDK

#.net #azure #azure-cosmosdb

#.net #azure #azure-cosmosdb

Вопрос:

Я увидел, что с новым .NET SDK мы можем возвращать stream из запроса, поэтому я пытаюсь это сделать, чтобы избежать сериализации / десериализации и сэкономить некоторое время.

Но проблема заключалась в том, что если мой запрос вернет более 8 тысяч записей, я потеряю записи, потому что все время максимальное количество элементов составляет около 7800. Есть ли способ увеличить это, потому что я не смог найти максимальное количество элементов, которые запрос может вернуть за одну итерацию? Я не хочу повторять ответ, также я не использую токен продолжения, я просто хочу отбросить ответ в виде потока.

Ответ №1:

Я предполагаю, что GetItemStreamIterator — это метод, который вы должны использовать для запроса потока.Это запускает итератор для перебора всех элементов для контейнера в качестве исходного CosmosResponseMessage

Это набор параметров, которые вы можете запросить к нему.

Параметры

maxItemCount — Обнуляемый (необязательно) Максимальное количество элементов, возвращаемых в рамках запроса

continuationToken- строка (необязательно) Токен продолжения в службе Azure Cosmos DB.

Варианты запросов- CosmosItemRequestOptions (необязательно) Параметры для запроса элемента запрашивают CosmosQueryRequestOptions

 public class ToDoActivity{
    public string id {get; set;}
    public string status {get; set;}
}

CosmosResultSetIterator setIterator = this.Container.Items.GetItemStreamIterator();
while (setIterator.HasMoreResults)
{
    using (CosmosResponseMessage iterator = await setIterator.FetchNextSetAsync())
    {
        using (StreamReader sr = new StreamReader(iterator.Content))
        {
            string content = await sr.ReadToEndAsync();
        }
    }
}  

Вы пробовали передавать maxcount (более 8k) в запросе. Посмотрим, поможет ли это.

Примечание: Всегда полезно иметь continuationtoken в запросе, чтобы иметь больше контроля.

Комментарии:

1. Привет, @Mohil Спасибо за твой ответ. Да, я пытался установить значение MaxItemCount больше 8 кб, но все равно оно застряло на каком-то значении 7 кб. Я создаю функцию Azure, которая будет оболочкой для cosmos db, и я не очень доволен временем отклика (8 МБ ответа возвращается за 4-5 секунд), поэтому я пробую некоторые другие подходы для сокращения времени. Еще раз спасибо.