2010-12-12 90 views
2

我需要在表存儲中創建增量報告。我需要能夠從幾個不同的工作者角色實例更新相同的記錄(每個角色有不同的實例)。使用Azure表創建增量報告

我解析原始數據後,我的報告主要包含我需要的值增量

我發現的樂觀解決方案是使用重試機制:嘗試更新記錄。如果您得到412結果代碼(您沒有最新的ETAG值),請重試。此解決方案變得效率更低,成本更高,您擁有的用戶越多,同時需要更多的數據更新(我的情況就是如此)。

想到的另一個解決方案是隻有一個工作者角色的實例可以更新任何給定的記錄。這是非常有問題的,因爲這意味着我將通過設計在我的架構中創建瓶頸,這與我希望通過Azure達到的規模相反。

如果任何人在這裏有一些最好的實踐記住這樣的用例,我很樂意聽到它。

回答

2

大多數雲存儲(表存儲是其中之一)不提供對單個實體/ blob /任何可伸縮寫入。這個限制沒有快速修復,因爲這個限制來自首先創建雲存儲的核心權衡。

基本上,一個存儲單元(entity/blob/whatever)可以每20ms更新一次,就是這樣。有一個專門的工作人員或不會改變這方面的任何事情。

相反,您需要從不同的角度解決您的任務。對於計數器,最常用的方法是使用sharded counters(鏈接用於GAE,但您可以在Azure上實現等效行爲)。

此外,另一種方法來緩解異步體系結構ala CQRS的痛苦,其中放置在實體更新延遲上的性能限制大大放寬。

0

我相信這種方法需要重新架構。爲了確保可擴展性和限制爭用量,您希望通過提供獨特的Table/PartitionKey/RowKey來確保每次寫入都能夠樂觀地工作。如果您需要將這些值合併到一起的報告,則需要一個單獨的進程/工作人員將後聚合/合併記錄用於報告目的。您可以使用隊列或計時機制來開始彙總/合併