回答
首先,我真的建議你立足於UTC的分區鍵蜱。你可以這樣做,所有的反義詞都是從最新到最古老的順序排列的。然後如果你想讓我們說100個最新的日誌,你可以調用它(可以說這個查詢是IQueryable的東西,來自你最喜歡的客戶端 - 我們使用Lucifure Stash):query.Take(100);
如果你想在一定的時間內讀取實體,你寫:query.Where(x => x.PartitionKey < = value);或類似的東西。
「value」變量必須根據構造分區鍵值的方式構造。
偉大的建議,並做了我想做的。 – Sam
假設你想獲取的最後15分鐘的數據,試試這個僞代碼:
所有的DateTime toDateTime = DateTime.UtcNow;
DateTime fromDateTime = toDateTime.AddMinutes(-15);
string myPartitionKeyFrom = fromDateTime.ToString("yy-MM");
string myPartitionKeyTo = toDateTime.ToString("yy-MM");
string query = "";
if (myPartitionKeyFrom.Equals(myPartitionKeyTo))//In case both time periods fall in same month, then we can directly hit that partition.
{
query += "(PartitionKey eq '" + myPartitionKeyFrom + "') ";
}
else // Otherwise we would need to do a greater than and lesser than stuff.
{
query += "(PartitionKey ge '" + myPartitionKeyFrom + "' and PartitionKey le '" + myPartitionKeyTo + "') ";
}
query += "and (RowKey ge '" + fromDateTime.ToString() + "' and RowKey le '" + toDateTime.ToString() + "')";
如果您想獲取最新的'n'個條目,那麼您需要稍微修改您的PartitionKey和RowKey值,以便最新的條目將被推到表格的頂部。
爲此,您需要使用DateTime.MaxValue.Subtract(DateTime.UtcNow).Ticks;
而不是DateTime.UtcNow來計算這兩個鍵。
Microsoft提供了一個SemanticLogging框架,它具有特定的接收器到log to Azure Table。
如果你看一下庫的代碼,它基於一個日期時間分區鍵(按相反順序):
static string GeneratePartitionKeyReversed(DateTime dateTime)
{
dateTime = dateTime.AddMinutes(-1.0);
return GetTicksReversed(
new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0));
}
static string GetTicksReversed(DateTime dateTime)
{
return (DateTime.MaxValue - dateTime.ToUniversalTime())
.Ticks.ToString("d19", (IFormatProvider)CultureInfo.InvariantCulture);
}
所以,你可以在你的應用程序建立你partitionkey實現相同的邏輯。
如果要檢索特定日期範圍內的日誌,可以編寫一個查詢,看起來像:
var minDate = GeneratePartitionKeyReversed(DateTime.UtcNow.AddHours(-2));
var maxDate = GeneratePartitionKeyReversed(DateTime.UtcNow.AddHours(-1));
// Get the cloud table
var cloudTable = GetCloudTable();
// Build the query
IQueryable<DynamicTableEntity> query = cloudTable.CreateQuery<DynamicTableEntity>();
// condition for max date
query = query.Where(a => string.Compare(a.PartitionKey, maxDate,
StringComparison.Ordinal) >= 0);
// condition for min date
query = query.Where(a => string.Compare(a.PartitionKey, minDate,
StringComparison.Ordinal) <= 0);3
- 1. 從任何內存地址讀取UInt32的最有效方法?
- 2. 從GAE數據存儲中讀取多對多對象的最有效方法
- 3. 從存儲數據構建鏈表的最有效方法?
- 4. 這是存儲和讀取一些文本數據的最有效方法嗎?
- 5. 從Netty中讀取的有效方法
- 6. 從Azure blob存儲中讀取文件
- 7. 獲取列表的最有效方法?
- 8. 從文件中讀取字符的最有效方法?
- 9. 從SQL Server 2005讀取UTF8(XML)數據最有效的方法
- 10. 從TCP套接字讀取最有效的方法
- 11. 從文件中讀取IP地址的最有效方法
- 12. 最有效的方法來存儲存儲在STL列表中每個項目
- 13. 從Excel中讀取存儲在Azure Blob存儲中的.csv
- 14. 從HDInsight中的Azure表存儲中讀取數據
- 15. C# - 定期讀取文件最後部分的最有效方法
- 16. 什麼是從Azure存儲表填充數據表的最佳方法
- 17. 最有效的存儲,寫入和讀取物品數據庫的方式。
- 18. 從沒有讀/寫權限的內部存儲讀取文件?
- 19. 什麼是儲存化學配方的最有效方法?
- 20. Azure存儲底層技術
- 21. 從Azure的表存儲
- 22. 從Azure表存儲獲取分區
- 23. 從HDF5獲取表索引的最有效方法
- 24. 從對象列表中獲取數據的最有效方法?
- 25. 爲Java程序讀取存儲只讀數據的最有效方法是什麼?
- 26. 從外部存儲器讀取文件
- 27. 從內部存儲文件(Android)讀取
- 28. 從內部存儲讀取ArrayList
- 29. 從內部存儲讀取文件
- 30. 從Azure表存儲中有效地檢索大量實體
你是怎樣在這個表中定義PartitionKey和RowKey值? –
@GauravMantri,是的,我確實有。 – Sam
對不起,我在上面的問題中不清楚。我想問的是關於你用來定義密鑰的邏輯。例如,如果您查看由雲服務收集的診斷數據,則他們使用DateTime.Ticks(採用UTC),最高精確度爲PartitionKey。 –