2011-11-16 50 views
62

因此,該場景如下:有更多的小型Azure存儲blob容器(每個都有一些blob)還是一個非常大的容器有大量blobs?

我有一個Web服務的多個實例,它將一組數據寫入Azure存儲。我需要能夠將blob分組到容器(或虛擬目錄),具體取決於它何時收到。偶爾(每天最糟糕的時候)舊的斑點會被處理,然後被刪除。

我有兩個選擇:

選項1

我做一個集裝箱被稱爲「斑點」(例如),然後存儲所有的博客到該容器中。每個BLOB將使用目錄樣式名與目錄名是它接收的時間(如「hr0min0/data.bin」,「hr0min0/data2.bin」,「hr0min30/data3.bin」,「hr1min45/data.bin 」,......, 「hr23min0/dataN.bin」,等等 - 一個新的目錄中的每個X分鐘)。處理這些blob的事件將首先處理hr0min0 blob,然後處理hr0minX等等(並且在處理時仍然正在寫入blob)。

選項2

我有許多容器各自與基於所述到達時間的名稱(因此第一將是一個容器稱爲blobs_hr0min0然後blobs_hr0minX等),並在容器中的所有斑點是那些斑點那到達了指定的時間。處理這些博客的內容將一次處理一個容器。

所以我的問題是,哪種選擇更好?選項2是否給了我更好的並行化(因爲容器可以位於不同的服務器中),還是選項1更好,因爲許多容器可能會導致其他未知問題?

回答

46

我不認爲它真正的問題(從可擴展性/並行化的角度看),因爲在Win Azure的分區斑點存儲在BLOB級別進行,而不是容器。分散到不同容器的理由更多地與訪問控制(例如SAS)或總存儲大小有關。

在這裏看到更多的細節:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx

(向下滾動到 「分區」)。

報價:

斑點 - 因爲分區鍵是向下BLOB名稱,我們可以加載到 大規模進出他們 平衡獲得跨越儘可能多的服務器不同的斑點秩序。這允許容器隨着您的需要增大(在存儲帳戶空間限制內),容量增大爲 。該 代價是,我們不提供跨多個斑點做原子 交易的能力。

+0

哇 - 很好的時間... :) – dunnry

+0

謝謝你,這使得決定清晰和容易! – encee

+0

請問,是否有必要儘可能縮短斑點名稱? (我有「一個非常大的容器有大量的斑點」,問題中的選項1.) – nmit026

18

從理論上講,大量容器或更少容器與更多斑點之間應該沒有區別。額外的容器可以作爲額外的安全邊界(例如公共匿名訪問或不同的SAS簽名)。額外的容器還可以在修剪時更輕鬆地管理內容(刪除單個容器而不是定位每個Blob)。由於這些原因,我傾向於使用更多的容器(而不是性能)。

理論上,性能影響不應該存在。 blob本身(完整URL)是Windows Azure中的分區鍵(已經很長時間了)。這是從分區服務器進行負載均衡的最小的事情。所以,你可以(並且經常會)在同一容器中有兩個不同的blob被不同服務器提供。

傑里米表示在容器數量越來越少時性能存在差異。我還沒有深入到這些基準,足以解釋爲什麼可能會出現這種情況,但我會懷疑其他因素(如大小,測試持續時間等)來解釋任何差異。

+0

:-)剛剛投票給你。 –

49

每個人都直接給出了有關訪問blob的優秀答案。但是,如果您需要在容器中列出Blob,那麼使用多容器模型可能會看到更好的性能。我剛剛與一家在一個容器中儲存大量斑點的公司進行了交談。他們經常列出容器中的對象,然後針對這些blob的子集執行操作。他們看到性能受到影響,因爲檢索完整列表的時間越來越長。

這可能並不適用於您的方案,但它是值得考慮......

+1

這是一個很好的觀點。在撰寫本文時(2016年6月),我認爲除了通過獲取該容器中的所有Blob列表並檢查列表的「Count」屬性之外,仍然無法獲得容器中Blob的數量計數。 –

+0

是否有任何需要保持blob名稱儘可能短? (我有「一個非常大的容器,有大量的斑點」,問題中的選項1)。 – nmit026

0

另外還有一點得到的這個一個因素。價錢!

目前操作列表和創建容器是同樣的價格: 0054 US $/10.000電話

同樣的價格實際上是寫團塊。

因此在極端的原因,你可以付出更多,如果你創建和刪除許多容器

  • 刪除是免費

,你可以在這裏看到計算器: https://azure.microsoft.com/en-us/pricing/calculator/

相關問題