我已經編寫了從c#中的wadlogstable獲取最新的診斷日誌,但是它遍歷所有記錄,然後給出最新的條目 前。表格中有5000條記錄,但我只想要最近或最近的1000條記錄 ,但它在給出所有記錄後,通過查詢給出最後的1000條記錄,所以非常耗時,fecth需要將近7-8分鐘4000-5000記錄如何獲取最新的低於1000 WADLogsTable條目?
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ATCommon.DiagnosticConfig);
CloudTableClient cloudTableClient = storageAccount.CreateCloudTableClient();
TableServiceContext serviceContext = cloudTableClient.GetDataServiceContext();
IQueryable<WadLogEntity> traceLogsTable = serviceContext.CreateQuery<WadLogEntity>("WADLogsTable");
var selection = from row in traceLogsTable where row.PartitionKey.CompareTo("0" + DateTime.UtcNow.AddHours(hours).Ticks) >= 0 select row;
//var selection = from row in traceLogsTable where row.PartitionKey.CompareTo("0" + DateTime.UtcNow.AddMinutes(-5.0).Ticks) >= 0 select row;
CloudTableQuery<WadLogEntity> query = selection.AsTableServiceQuery<WadLogEntity>();
IEnumerable<WadLogEntity> output = query.Execute();
return output.OrderByDescending(s => s.Timestamp).ToList();
什麼是您的分區密鑰?你可以提供樣本數據嗎? – Mahesh
@Mahesh分區鍵是用於過濾目的,以及我在這裏共享的整個代碼。 –
那就是我想說的。 azure表不支持排序,所有使用分區鍵您需要編寫邏輯以獲取最新的100分區鍵作爲索引在您的表中,因此查詢將運行速度快。使用分區鍵過濾器,你需要像先寫邏輯只獲得最後2小時記錄,如果你在這個查詢中只有60個,再試一次,然後填寫你的清單,然後按它排序,只需100 – Mahesh