簡體   English   中英

將Azure存儲表數據清除/復制到SQL Azure的最快方法?

[英]The fastest way to purge/copy Azure Storage Table data to SQL Azure?

我具有這些工作人員角色,這些角色正在聚集傳入的數據並將總數存儲在Azure存儲表中。 我需要將此數據清除(或在指定的時間間隔內復制)到SQL Server進行報告。 我要批量清除大約數千行。 使用選擇/插入/更新的簡單循環將花費一些時間。

任何想法如何最有效地做到這一點? 謝謝!

所有數據都在定義明確的分區中嗎? 例如,分區鍵“ A”中有1000個實體,分區鍵“ B”中有1000個實體。 如果是這樣,那么您應該能夠從特定分區中選擇所有記錄。 根據記錄的數量,您可能必須處理延續令牌(您只能為每個請求取回最大數量,並使用延續令牌來獲取剩余的記錄)。

使用分區鍵也可能是更新批處理(在事務中)的好方法。

您可以嘗試在本地下載所有數據,然后將其插入SQL。

如何備份Windows Azure表存儲?

一個月前,我一直在尋找類似的解決方案,發現最快的方法是使用自己的代碼-批量讀取表存儲並插入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM