2013-07-13 54 views
1

的Blob我有成千上萬&成千上萬的斑點在一個容器中,像查找Azure的集裝箱

  • A /溫度/ A001-1.log
  • A /溫度/ A001-2.log
  • A /溫度/ A001-3.log
  • B/TMP/B001-1.log
  • B/TMP/B001-2.log
  • B/TMP/B002-1.log

現在我的問題是,我想找到它的名字中有A001的Blob。我明白,ListBlobsWithPrefix尋找Blob開始與一些文本,這不是我的情況。 ListBlobs會將所有的斑點帶到我的代碼中,然後我將不得不搜索那個。有什麼方法可以讓我找到我想要的斑點。

回答

2

真的沒有簡單的方法來搜索一個特定的blob(或一組名稱模式斑點)的容器除蠻力之外。正如你所猜測的,名稱前綴在這種情況下也不會幫助你。

我通常建議人們做的事情是將他們的可搜索元數據保存在其他地方(也許SQL DB,也許MongoDB,只要它提供了他們需要的搜索功能並不重要),包含引用的數據存儲鏈接到確切的blob。 blob名稱本身也可以作爲可搜索屬性之一存儲在元數據中。

另外:一旦你進入「成千上萬的容器中的數千個斑點」,你會發現拉出blob名字將需要一段時間(我認爲你再次看到這一點)。容器當然可以容納任意數量的blob,但在這種情況下,您真的想直接訪問它們,基於其他元數據,而不是通過名稱列表枚舉。

+0

我知道保持可搜索的元數據是分開的,但這是一個正在採用到雲中的現有應用程序。我想我們在這裏沒有太多的選擇,對吧? –

+0

那麼......總是有緩存。如果您使用的是網絡/工作人員,只需創建一個緩存角色(或者在您的網絡或工作人員中使用協同定位的緩存)。讀取它們時,按每個容器(或每個前綴,或其他方式)緩存名稱。假設所有名稱都適合緩存,這可能是您的一個解決方法。 –

+0

那麼這是我不知道的。我將不得不對此進行研究。在任何情況下,這不會幫助我,因爲我的應用程序是內部部署應用程序,只是我的數據在Blob中。因此,它的內部部署應用程序需要聯繫Blob以獲取其數據。 –

0

而不是搜索,如果其前綴已知,則構造blobname,然後嘗試下載blob.如果blob未找到,您將獲得404未找到異常。