2010-04-15 44 views
23

我正處於一個Web應用程序的規劃階段,該應用程序將在ASP.NET的Azure中爲網站和Silverlight託管,以實現豐富的用戶體驗。我應該使用Azure Tables還是SQL Azure來存儲我的應用程序數據?Azure表或SQL Azure?

回答

34

Azure Table Storage似乎比SQL Azure更便宜。它也比SQL Azure具有更高的可伸縮性。

如果您一直在做大量的關係數據庫工作,SQL Azure更容易使用。如果你正在移植一個已經在使用SQL數據庫的應用程序,那麼將它移植到SQL Azure將是明顯的選擇,但這是我推薦它的唯一情況。

Azure表的主要限制是缺少二級索引。這是在PDC '09宣佈的,目前即​​將上市,但沒有任何時間表公告。 (請參閱http://windowsazure.uservoice.com/forums/34192-windows-azure-feature-voting/suggestions/396314-support-secondary-indexes?ref=title

我已經看到了混合系統的建議使用,其中您將大量數據使用表和blob存儲,但使用SQL Azure進行索引,搜索和過濾。然而,我自己還沒有機會嘗試這個解決方案。

將輔助索引添加到表存儲後,它基本上將成爲基於雲的NoSQL系統,並且將比現在更有用。

+0

讓我們希望他們在Build 2014上宣佈這一點。 – 2014-01-19 13:25:12

+0

正如我的回答所述,這是在2009年PDC(他們曾稱之爲Build)宣佈的!幾年前我停止了屏息。 2014版Build的發佈會很可笑。他們只需要發送該功能。 Azure Tables可能是競爭者。 – CoderDennis 2014-01-19 13:36:37

8

對於那些試圖在兩種選擇之間做出決定的人,一定要將報告要求納入等式中。 SQL Azure Reporting和其他報告產品支持SQL Azure開箱即用。如果您需要生成複雜或靈活的報告,則可能需要避免使用表存儲。

3

另一個考慮因素是延遲。曾經有一個網站使用微軟基準測試表格存儲和SQL Azure的各種對象大小的吞吐量和延遲。由於該網站已不再可用,我只是從我記得的內容中給出一​​個粗略的近似值。表存儲通常比SQL Azure具有更高的吞吐量。 SQL Azure往往有較低的延遲(多達1/5)。

已經提到,表存儲容易擴展。但是,SQL Azure也可以通過Federations進行擴展。請注意,聯合會(有效sharding)爲您的應用程序增加了很多複雜性。我也不確定有多少聯盟會影響性能,但我想有一些開銷。

如果業務連續性是優先事項,則默認情況下請考慮使用Azure存儲you get cheap geo-replication。使用SQL Azure,您可以完成類似的工作,但需要花費更多的精力與SQL Data Sync。請注意,SQL數據同步還會導致性能開銷,因爲它需要所有表上的觸發器來監視數據更改。

2

我意識到這是一個古老的問題,但仍然是一個非常有效的問題,所以我加了我的回覆。

Coder Dennis和其他人已經指出了一些事實 - Azure Tables更便宜,Azure Tables可以更大,更高效等。如果您100%確定要堅持使用Azure,請使用Tables。

但是,這假定您已經決定了Azure。通過使用Azure表,您可以將自己鎖定在Azure平臺中。這意味着要編寫非常特定於Azure表的代碼,這些代碼不僅要移植到Amazon,還必須重寫代碼的這些區域。另一方面,使用LINQ編寫SQL數據庫將更容易轉移到另一個雲服務。

如果您已經決定了您的雲平臺,這可能不是問題。

1

對於你的問題,我想談談如何用邏輯決定選擇SQL表,哪些需要使用Azure表。

正如我們所知,SQL Table是一個關係數據庫引擎。但如果您在一個表中有大數據,則SQL表不適用,因爲SQL查詢獲取大數據的速度很慢。

這時你可以選擇Azure Table,Azure Table查詢是如此之快,然後是SQL Table for大數據,例如在我們的網站上,有人訂閱了很多文章,我們把這篇文章作爲feed給用戶,每個用戶有文章標題和說明的副本,因此在文章表中有大量數據,如果我們使用SQL表,每個查詢執行可能需要超過30秒。但是在Azure Table中,通過PartitionKey獲取用戶文章提要,並且RowKey非常快速。

從這個例子中你可能知道如何在SQL表和Azure表中進行選擇。

+0

聽起來像你應該已經添加了一些索引到你的SQL表。 – CoderDennis 2014-01-23 15:39:14

4

Azure表比SQL Azure更便宜,更簡單,更好。 SQL Azure是託管SQL環境,本質上是多租戶,所以您應該分析您的性能需求是否適合SQL Azure。 SQL Azure的高級版本已經發布,並且在撰寫本文時已預覽(請參閱HERE)。

我認爲決定性因素,SQL Azure和Azure的表之間的決定如下:

  • 你需要做複雜的連接和使用輔助指標?如果是的話,SQL Azure是最好的選擇。
  • 你需要存儲過程嗎?如果是的話,SQL Azure。
  • 您是否需要自動縮放功能? Azure表是最好的選擇。
  • Azure表內的行大小不能超過4MB。如果您需要在一行中存儲大數據,最好將其存儲在blob存儲中,並在表格行中引用blob的URI。
  • 您是否需要存儲大量的半結構化數據?如果是的話,Azure表是有利的。

儘管Azure表在簡單性和成本方面極爲有利,但仍有一些需要考慮的限制。有關初步指導,請參閱HERE

2

我建議您將Azure緩存與Azure Table結合使用。表格單獨具有200-300ms的延遲,偶爾會出現尖峯,這可能會顯着減慢響應時間/ UI交互性。Cache + Table對我來說似乎是一個成功的組合。

0

我想知道在適當的時候我們是否會結束一些「獨立於供應商的」雲api庫?

0

我認爲你首先要定義你的應用程序使用漏斗是什麼。您的數據模型會經常發生變化還是穩定?你必須能夠執行超快速插入和讀取不那麼複雜?你需要像搜索一樣提前谷歌?存儲BLOBS?

這些問題(而不僅僅是)你必須自問和回答,以決定是否更可能使用NoSql或SQL方法來存儲數據。

請考慮這兩種方法可以很容易地共存,並且可以通過BLOB存儲擴展。