0
在CreateDocumentQuery中,我使用MaxItemCount,然後使用HasMoreResults和ExecuteNextAsync - 這在其他文章中已有描述。Azure DocumentDB使用MaxItemCount跳過記錄的C#SDK
我的問題是,有時 - 特別是在對DocumentDB進行大量更新之後 - 循環遍歷每個文檔都有一些隨機結果,其中多達一半的文檔被忽略。
這隻會發生,如果我在查詢設置中包含SQL查詢 - 因爲我只需要處理一些字段/列。如果我允許所有的領域回來,它的工作100%。但是這樣做效率不高,因爲我僅輸出幾列,而且有近百萬條記錄。
我需要使用C#,因爲它是一個與其他C#模塊鏈接的計劃作業。
有沒有人能夠一致地循環使用分頁的大集合?
下面的代碼提取 - 包括sql - 如果我從查詢中刪除sql沒有問題。
sql = "select d.field1, d.field2 from doc d";
var query = client.CreateDocumentQuery("dbs/" + database.Id + "/colls/" + documentCollection.Id, sql
new FeedOptions { MaxItemCount = 1000 }
).AsDocumentQuery();
while (query.HasMoreResults)
{
FeedResponse<Document> res;
while (true)
{
try
{
res = await query.ExecuteNextAsync<Document>();
break; // success!
}
catch (Exception ex)
{
if (ex.Message.IndexOf("request rate too large") > -1)
{
// DocumentDB is under pressure - wait a while and retry - this will resolve eventually
System.Threading.Thread.Sleep(5000);
}
else
{
errorcount++;
throw ex;
}
}
}
if (res.Any())
{
foreach (var liCurrent in res)
{
try
{
// Convert the Document to a CSV line item
// DO THE FILE LINE CREATION HERE
fileLineItem = "test";
// Write the line to the file
writer.WriteLine(fileLineItem);
}
catch (Exception ex)
{
errorcount++;
throw ex;
}
totalrecords++;
}
}
}
什麼是數據庫的一致性級別?有關一致性級別的更多信息,請查看https://azure.microsoft.com/en-us/documentation/articles/documentdb-consistency-levels/ –
謝謝 - 將一致性更改爲一致而非懶惰似乎解決了這一問題。 – smulldino
您應該將其作爲答案發布。可能對其他人有用。 –