我正處於一個Web應用程序的規劃階段,該應用程序將在ASP.NET的Azure中爲網站和Silverlight託管,以實現豐富的用戶體驗。我應該使用Azure Tables還是SQL Azure來存儲我的應用程序數據?Azure表或SQL Azure?
回答
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系統,並且將比現在更有用。
儘管名稱相似,但SQL Azure表和表存儲的共同點很少。
這裏有兩個鏈接,可以幫助你:
基本上,第一個問題應該想的就是難道我的應用程序確實需要擴展?如果不是,那麼去SQL Azure。
對於那些試圖在兩種選擇之間做出決定的人,一定要將報告要求納入等式中。 SQL Azure Reporting和其他報告產品支持SQL Azure開箱即用。如果您需要生成複雜或靈活的報告,則可能需要避免使用表存儲。
另一個考慮因素是延遲。曾經有一個網站使用微軟基準測試表格存儲和SQL Azure的各種對象大小的吞吐量和延遲。由於該網站已不再可用,我只是從我記得的內容中給出一個粗略的近似值。表存儲通常比SQL Azure具有更高的吞吐量。 SQL Azure往往有較低的延遲(多達1/5)。
已經提到,表存儲容易擴展。但是,SQL Azure也可以通過Federations進行擴展。請注意,聯合會(有效sharding)爲您的應用程序增加了很多複雜性。我也不確定有多少聯盟會影響性能,但我想有一些開銷。
如果業務連續性是優先事項,則默認情況下請考慮使用Azure存儲you get cheap geo-replication。使用SQL Azure,您可以完成類似的工作,但需要花費更多的精力與SQL Data Sync。請注意,SQL數據同步還會導致性能開銷,因爲它需要所有表上的觸發器來監視數據更改。
我意識到這是一個古老的問題,但仍然是一個非常有效的問題,所以我加了我的回覆。
Coder Dennis和其他人已經指出了一些事實 - Azure Tables更便宜,Azure Tables可以更大,更高效等。如果您100%確定要堅持使用Azure,請使用Tables。
但是,這假定您已經決定了Azure。通過使用Azure表,您可以將自己鎖定在Azure平臺中。這意味着要編寫非常特定於Azure表的代碼,這些代碼不僅要移植到Amazon,還必須重寫代碼的這些區域。另一方面,使用LINQ編寫SQL數據庫將更容易轉移到另一個雲服務。
如果您已經決定了您的雲平臺,這可能不是問題。
對於你的問題,我想談談如何用邏輯決定選擇SQL表,哪些需要使用Azure表。
正如我們所知,SQL Table是一個關係數據庫引擎。但如果您在一個表中有大數據,則SQL表不適用,因爲SQL查詢獲取大數據的速度很慢。
這時你可以選擇Azure Table,Azure Table查詢是如此之快,然後是SQL Table for大數據,例如在我們的網站上,有人訂閱了很多文章,我們把這篇文章作爲feed給用戶,每個用戶有文章標題和說明的副本,因此在文章表中有大量數據,如果我們使用SQL表,每個查詢執行可能需要超過30秒。但是在Azure Table中,通過PartitionKey獲取用戶文章提要,並且RowKey非常快速。
從這個例子中你可能知道如何在SQL表和Azure表中進行選擇。
聽起來像你應該已經添加了一些索引到你的SQL表。 – CoderDennis 2014-01-23 15:39:14
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。
我建議您將Azure緩存與Azure Table結合使用。表格單獨具有200-300ms的延遲,偶爾會出現尖峯,這可能會顯着減慢響應時間/ UI交互性。Cache + Table對我來說似乎是一個成功的組合。
我想知道在適當的時候我們是否會結束一些「獨立於供應商的」雲api庫?
我認爲你首先要定義你的應用程序使用漏斗是什麼。您的數據模型會經常發生變化還是穩定?你必須能夠執行超快速插入和讀取不那麼複雜?你需要像搜索一樣提前谷歌?存儲BLOBS?
這些問題(而不僅僅是)你必須自問和回答,以決定是否更可能使用NoSql或SQL方法來存儲數據。
請考慮這兩種方法可以很容易地共存,並且可以通過BLOB存儲擴展。
- 1. Windows Azure表存儲或SQL Azure
- 2. SQL Azure表關係
- 3. SQL Azure表大小
- 4. Sql Server Azure PERMISSION_SET = EXTERNAL_ACCESS或UNSAFE
- 5. 安裝了SQL Server的Azure SQL Server VM或Azure Windows服務器
- 6. Azure WebJobs和Azure SQL Server?
- 7. Azure虛擬機和SQL Azure
- 8. Azure SQL與Azure Database for MySQL
- 9. 在Blob存儲在Azure的SQL(不Azure的SQL DW)外部表
- 10. 通過Azure Rest API或Azure管理SDK啓動/停止Azure SQL數據倉庫
- 11. Azure存儲表VS SQL
- 12. Azure表和SQL Server Management Studio
- 13. AZURE SQL TRUNCATE表分區
- 14. SQLite或Azure表存儲
- 15. 從Azure VM連接到SQL Azure - 內部IP或公共VIP
- 16. Azure SQL超時
- 17. rowversion in SQL Azure
- 18. SQL Azure Timeout
- 19. Azure SQL延遲
- 20. Microsoft SQL Azure HIPAA
- 21. SQL Azure複製
- 22. SQL Azure和CakePHP
- 23. Azure SQL定價
- 24. Azure SQL複製
- 25. SQL Azure和READ_COMMITTED_SNAPSHOT
- 26. 審計SQL Azure
- 27. SSRS和Azure SQL
- 28. Azure SQL性能
- 29. SQL Azure報告
- 30. SQL Azure備份
讓我們希望他們在Build 2014上宣佈這一點。 – 2014-01-19 13:25:12
正如我的回答所述,這是在2009年PDC(他們曾稱之爲Build)宣佈的!幾年前我停止了屏息。 2014版Build的發佈會很可笑。他們只需要發送該功能。 Azure Tables可能是競爭者。 – CoderDennis 2014-01-19 13:36:37