2012-06-09 69 views
0

我們使用Windows Azure表記錄我們的應用程序中的錯誤,這些應用程序託管在工作者角色或Web角色中。我們在表中記錄了足夠的信息,以便很容易地識別哪個角色,哪個類的組件記錄了錯誤。Windows Azure表日誌記錄,查詢問題

組件Id(完全限定類名)是使用分區鍵和隨機唯一的Guid作爲行鍵。

顯示在ASP.NET MVC網站,在那裏管理員可以根據過濾標準像組件ID,日期範圍,角色標識符,嚴重程度等搜索此日誌這個日誌信息

這工作得很好,直到表很小。一旦天藍色的表格包含大量記錄(200000或更多),則在天藍色表格上過濾花費的時間太長,並且超時。我們使用.NET Azure存儲API來查詢表。

我們還希望對返回的結果集進行分頁,但它看起來像在azure表中,我們沒有得到確切的返回記錄數。

我們嘗試使用Azure存儲API來應用過濾器並根據當前頁碼獲取數據,但它不工作。我知道我們可能不得不重新設計我們的表結構,特別是partitionkey和rowkey,但不知道如何繼續。

回答

0

如果你需要大量的自定義過濾器,表存儲可能不提供最佳的性能。考慮在可能的情況下使用SQL Azure。要增加表格存儲性能,您可以嘗試:

  1. 請勿使用自定義裝配器。只使用分區/行鍵過濾結果。這會給你最好的表現。

  2. 使每個分區變小。掃描小分區比掃描大分區要快。

至於分頁,除非有跨分區查詢,否則分頁應該按預期工作。如果您要求20個實體,則會返回20個實體(如果有這麼多)。但是如果遇到分區邊界,則需要新的頁面。例如,如果在找到第15個匹配實體時遇到分區邊界,則在此請求中只會返回15個實體。您必須創建一個新的請求來查詢下一個分區。如果分區很小,則可能會更頻繁地遇到此問題。因此,如果需要,您需要設計系統以自動查詢下一個分區。

還要記住表存儲的分頁不是基於頁碼。它基於延續令牌。有關更多信息,請參閱http://msdn.microsoft.com/en-us/library/dd135718.aspx

+0

我們打算使用sql azure,因爲azure日誌表不提供查詢它的好選擇。 –

1

使用表存儲時,您只有2個「索引」屬性,分區鍵和行鍵。如果您有大量數據,搜索其他字段將會非常緩慢。

在實現尋呼系統時,或者當您要訂購數據時,您應該使用行鍵。行鍵定義您的數據的順序(排序順序是詞典)。

我建議你看一看史蒂夫的博客文章的詳細信息,排序和訂購數據:Using Numbers as Keys in Windows Azure

+0

謝謝Sandrino。我已經瀏覽了您提供的鏈接。它只會解決訂購問題。它不會解決其他問題 –

0

在這種情況下,我會建議記錄器,我已經寫在Azure表 - QLog中存儲日誌。你可以通過NuGet獲取它。它帶有一個QLogBrowser,可以讓你以你想要的方式查詢日誌。 GitHub項目網站是here