2011-11-03 118 views
61

我想在Windows Azure上使用NoSQL數據庫,並且數據量將非常大。使用Worker角色運行的Azure表存儲或MongoDB數據庫是否可以提供更好的性能和可伸縮性?有沒有人使用Worker角色在Azure上使用MongoDB?請分享您在Azure上使用Azure上MongoDB的想法。Azure Table與Azure上的MongoDB

回答

72

表存儲是一個核心Windows Azure存儲功能,被設計成可擴展的( 100TB 200TB 每個帳戶500TB),耐用的(三重複制在數據中心,任選georeplicated到另一數據中心),和無模式(每行可能包含您想要的任何屬性)。一行通過分區鍵+行鍵來定位,提供非常快速的查找。所有的表存儲訪問都是通過一個可以通過任何語言使用的定義良好的REST API來實現的(使用SDK,構建在REST API之上,已經爲.NET,PHP,Java,Python提供了Ruby &)。

MongoDB是一個面向文檔的數據庫。要在Azure中運行它,需要將MongoDB安裝到Web/Worker角色或虛擬機上,將其指向雲驅動器(從而提供驅動器盤符)或連接的磁盤(用於Windows/Linux虛擬機),可選地啓用日記功能(我建議),並可選擇定義一個外部端點供您使用(或通過虛擬網絡訪問它)。順便說一下,雲端硬盤/連接磁盤實際上存儲在Azure Blob中,爲您提供與Azure Tables相同的耐用性和地理複製。

比較兩者時,請記住表存儲是存儲即服務:您只需訪問衆所周知的REST端點。在MongoDB中,您負責維護數據庫(例如,當MongoDB Inc(以前的10gen)推出新版本的MongoDB時,您需要相應地更新您的服務器)。

關於MongoDB的公司的alpha版本指向jtoberon:如果你在它仔細看,你會看到一些關鍵的東西:

  • 的設置是爲獨立MongoDB實例,沒有replica-集合或碎片。關於副本集,由於Blob存儲的工作方式,您仍然可以使用Standalone版本獲得多項優勢。
  • 要提供高可用性,可以運行多個實例。在這種情況下,只有一個實例服務於數據庫,一個是「熱備份」,一旦另一個實例失敗(用於維護重啓,硬件故障等),就會啓動mongod進程。

雖然10gen的Windows Azure包裝仍然被認爲是'alpha',但mongod.exe不是。您可以啓動mongod exe,就像啓動其他Windows exe文件一樣。這只是圍繞啓動的管理代碼,這就是ALPA實施展示的內容。

編輯2011-12-8:這不再處於alpha狀態。您可以下載最新的MongoDB + Windows Azure項目here,該項目提供副本集支持。

對於性能,我認爲你需要做一些基準測試。話雖如此,請考慮以下事項:

  • 當從Web角色訪問Table Storage或MongoDB時,您仍然接觸到Windows Azure存儲系統。
  • MongoDB爲自己的緩存使用大量內存。出於這個原因,許多高規模的MongoDB系統被部署到更大的實例大小。對於表存儲訪問,您不會有相同的內存大小考慮因素。

編輯2015年4月7日 如果你想使用基於文檔的數據庫作爲一種服務,天青現在提供DocumentDB。

+0

我自己沒有這樣做,但MongoDB似乎通過商店來作爲Azure附加組件。據推測,這使得部署與Azure表格存儲一樣簡單。 – John

35

我都用了。

Azure的表:死了簡單,快速,真的很難寫,甚至簡單的查詢。

蒙戈:運行很好,大量的查詢功能,需要幾個實例是可靠的。

簡而言之,如果您的查詢非常簡單(key-> value),則必須運行成本比較(主要是針對存儲的事務數與在Azure上託管Mongo的成本)。我寧願去那個表的存儲。 如果您需要更復雜的查詢,不想去SQL Azure的,蒙戈可能是你最好的選擇。

+0

發佈類似於WCF數據服務的端點後,情況仍然如此嗎?我認爲你可以在這些端點上做LINQ –

+0

你能解釋一下(或者指向一個關於)你的評論「需要幾個實例是可靠的」嗎?爲什麼2不可靠? – Mark

+1

是的,Azure表中的查詢仍然很難,即使在較新的版本中也是如此。你可以做LINQ,但並不是所有的功能都支持 - 例如orderby,「contains」和count,並且會導致錯誤。除了針對PK的任何查詢都會導致表掃描。 – Daniel

5

我的第一選擇是AzureTables因爲SAAS模式,成本低和SLA 99.99%
http://alexandrebrisebois.wordpress.com/2013/07/09/what-if-20000-windows-azure-storage-transactions-per-second-isnt-enough/


一些限制.. http://msdn.microsoft.com/en-us/library/windowsazure/jj553018.aspx


http://www.windowsazure.com/en-us/pricing/calculator/?scenario=data-management

或小型企業

AzureSQL

解決的文entDB http://azure.microsoft.com/en-us/documentation/services/documentdb/ http://azure.microsoft.com/en-us/documentation/articles/documentdb-limits/


第二個選擇是許多雲供應商包括亞馬遜報價S3

或谷歌表https://developers.google.com/bigquery/pricing


第n選擇管理SHOW全部由我自己都沒有睡覺MongoDB的好,我會看再前兩個SAAS


我的選擇,如果我運行「雲」我的Wi LL儘可能多的去SAAS模式作爲可能的 「RENT-IT」 ......

的問題是什麼我的應用程序需要的是它AzureTables或DocumentDB或AzureSQL
DocumentDB文檔 http://azure.microsoft.com/en-us/documentation/services/documentdb/

如何Azure的定價工作 http://azure.microsoft.com/en-us/pricing/details/documentdb/

這是樂趣 http://www.documentdb.com/sql/demo

8

我意識到這個問題是過時了。我想爲在搜索中遇到此問題的人添加以下信息。

需要注意的是,現在,MongoDB是提供作爲在Azure上完全託管服務。(正式測試版爲四月'15的)

參見: http://www.mongodb.com/partners/cloud/microsofthttps://azure.microsoft.com/en-us/blog/announcing-new-mongodb-instances-on-microsoft-azure/

見(包括定價): https://azure.microsoft.com/en-us/marketplace/partners/mongolab/mongolab/

2

以上答案都是很好的 - 但真正的答案取決於你的要求是什麼。您需要了解您正在處理的數據大小,您希望對數據執行哪些類型的操作,然後選擇滿足您需求的解決方案。

2

在Build 2016期間,宣佈DocumentDB將支持所有MongoDB驅動程序。這解決了DocDB中缺少工具問題的一些問題,並且使遷移Mongo應用變得更加容易。

0

有一點要記住的是Azure的表存儲不支持複雜的數據類型。它支持實體每個屬性是一個字符串或數字或布爾或日期等 一個不能存儲對一個對象關鍵,我認爲這是NoSql DB的必備條件。 https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/understanding-the-table-service-data-model滾動到房產類型

+0

「Azure表存儲不支持複雜的數據類型「。這不完全正確。藉助Azure存儲SDK 8.0.0.0版,api將添加到SDK中,以便將複雜對象寫入表存儲。請參閱https://msdn.microsoft.com/en-us/library/azure/mt775434.aspx和https://msdn.microsoft.com/en-us/library/azure/mt775432.aspx。我寫了這些api的s :)所以如果你有任何意見隨意問.. –

+0

請你能分享與Node.js的例子,也有一個屬性的大小約束強制64KB最大限制的權利,與這我們可以存儲一個非常大的對象?,在此先感謝... –

+0

是的我同意我們可以通過序列化和反序列化來完成此操作,但是沒有任何額外的努力,無SQL數據庫應該默認支持它們,但我覺得Azure是一個Table類型存儲(列明智,最適合簡單的鍵值數據)。 –