[英]The fastest way to purge/copy Azure Storage Table data to SQL Azure?
我具有這些工作人員角色,這些角色正在聚集傳入的數據並將總數存儲在Azure存儲表中。 我需要將此數據清除(或在指定的時間間隔內復制)到SQL Server進行報告。 我要批量清除大約數千行。 使用選擇/插入/更新的簡單循環將花費一些時間。
任何想法如何最有效地做到這一點? 謝謝!
所有數據都在定義明確的分區中嗎? 例如,分區鍵“ A”中有1000個實體,分區鍵“ B”中有1000個實體。 如果是這樣,那么您應該能夠從特定分區中選擇所有記錄。 根據記錄的數量,您可能必須處理延續令牌(您只能為每個請求取回最大數量,並使用延續令牌來獲取剩余的記錄)。
使用分區鍵也可能是更新批處理(在事務中)的好方法。
您可以嘗試在本地下載所有數據,然后將其插入SQL。
一個月前,我一直在尋找類似的解決方案,發現最快的方法是使用自己的代碼-批量讀取表存儲並插入sql。 有用的一件事是在sql導入表中臨時記錄PartitionKey + RowKey,以便在導入失敗時可以從上次成功的位置安全地重新啟動它。
RedGate和其他一些工具允許您檢索表存儲中的所有數據,但據我所知-他們將其轉儲到文件中-而不是SQL。
首先介紹最簡單的部分。 一旦將ATS中的數據存儲在內存中,就可以使用SqlBulkCopy將SQL Server中的許多行快速插入(它的工作方式類似於BCP,但來自.NET)。
現在,最困難的部分是從ATS快速獲取數據。 我對您的Pkey / Rkey模式一無所知。 但是,需要考慮以下幾點:
1)使用單個PartitionKey和RowKey的范圍對ATS執行查詢最快。 如果您的查詢不包含RowKey的條件,那么即使您的行數少於1000並且指定了PartitionKey,您也可能會遇到連續令牌
2)如果您需要從ATS中獲取大量數據並將工作分解為一堆單獨的且性能良好的查詢,請考慮將查詢分布到隊列消息中,然后讓多個處理器在paralelle中單獨處理每個查詢
3)清除可能很有趣。 您可以使用批處理事務一次清除100個實體,因此,如果您的單個查詢允許,則在將數據處理到sql server之后,您可以使用相同的內存中實體,並且每個分區鍵一次清除100個實體(此操作會很快)。 或者,如果可以的話,可以將表拆分為按某個日期或其他鍵分區的多個表,並通過一次刪除一個表來刪除數據。 例如,如果您有一個較大的Orders表,而您需要移至SQL,而不是只有一個Orders表,則創建每月的Orders表:Orders201301..thru..Orders2xxx_12 ...,然后導入一個月的訂單,只需通過一個命令殺死該表(即可快速工作)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.