2010-12-14 53 views
6

我正在將Windows Azure應用程序遷移到Amazon AWS。在Windows Azure中,我們使用Lokad.Clout來獲得對Azure Blob存儲的強類型訪問。例如像這樣:使用C#強力訪問亞馬遜S3

foreach(var name in storage.List(CustomerBlobName.Prefix(country)) 
{ 
    var customer = storage.GetBlob(name); // strong type, no cast! 
    // do something with 'customer', snipped 
} 

更詳細的例子參見their wiki

在適用於.NET的AWS開發工具包中,您不會獲得強類型訪問權限。例如,爲了達到上述目的,您必須執行ListBojects,然後解析每個對象的關鍵字,以便查找關鍵字的每個單獨屬性(我們經常使用由多個屬性組成的關鍵字)。

是否有任何S3相當於Lokad.Cloud for Azure?

更新:由於對象的大小,我們不能使用SimpleDB(使用Simple Savant)。

回答

0

我自己通過將Lokad.Cloud中的那些特定名稱類從Azure移植到S3來解決它自己的問題

3

取而代之的是使用S3,我認爲你想使用Amazon SimpleDB。它允許您以鍵值對格式存儲數據,並對數據運行查詢。

然後,要做你想找的事情,我想你想要的是Simple Savant

Simple Savant是用C#編寫的Amazon SimpleDB的.NET對象持久化框架。

隨着莎凡特簡單,你可以保存對象是這樣的:

var savant = new SimpleSavant(AwsAccessKeyId, AwsSecretAccessKey); 
var customer = new Customer 
    {Name = "Frank Berry", PhoneNumbers = new List<string> {"770-555-1234", "678-555-5678"} }; 
savant.Put(customer); 

你可以像這樣的檢索對象:

var frankId = new Guid("50a60862-09a2-450a-8b7d-5d585662990b"); 
Person frank = savant.Get<Person>(frankId); // strong type, no cast! 

希望這有助於!

+0

謝謝!但是,我應該澄清,在我們的例子中,使用SimpleDB不是一種選擇。對象太大而無法存儲在SimpleDB中。 – Yrlec 2010-12-15 09:34:48

1

這不是S3被優化的東西。

你應該使用S3來存儲你的blob和一個數據庫(SimpleDB,Sql Server等)來索引你的S3存儲。使用數據庫來查找您要查找的內容,從S3獲取對象,進行更改,然後將其保存回來。

+0

S3以何種方式未針對強類型訪問進行優化?密鑰可以是多個不同屬性的集合,並且自動從這些屬性創建密鑰比手動創建密鑰要方便得多。 – Yrlec 2010-12-15 10:02:41

+0

@Yrlec - 也許我誤解了你想要做的事情,但正如你所描述的那樣,枚舉大量的S3鍵是單調乏味的。 – 2010-12-15 10:54:37