C# 使用C对AmazonS3的强类型访问#

C# 使用C对AmazonS3的强类型访问#,c#,azure,amazon-s3,amazon-web-services,blob,C#,Azure,Amazon S3,Amazon Web Services,Blob,我当前正在将Windows Azure应用程序迁移到Amazon AWS。在WindowsAzure中,我们曾经获得对Azure Blob存储的强类型访问。例如: foreach(var name in storage.List(CustomerBlobName.Prefix(country)) { var customer = storage.GetBlob(name); // strong type, no cast! // do something with 'customer',

我当前正在将Windows Azure应用程序迁移到Amazon AWS。在WindowsAzure中,我们曾经获得对Azure Blob存储的强类型访问。例如:

foreach(var name in storage.List(CustomerBlobName.Prefix(country))
{
  var customer = storage.GetBlob(name); // strong type, no cast!
  // do something with 'customer', snipped
}
有关更多详细示例,请参见

在.NET的AWS SDK中,您无法获得强类型访问。例如,为了实现上述目标,您必须执行ListBojects,然后解析每个对象的键,以便找到键的每个单独属性(我们通常使用由多个属性组成的键)

是否有任何S3等同于Azure的Lokad.Cloud


更新:由于对象的大小,我们无法使用SimpleDB(使用Simple Savant)。

我想您应该使用Amazon SimpleDB,而不是使用S3。它允许您以键值对格式存储数据,还可以对数据运行查询

那么,要做你想做的事,我想你想要的是

Simple Savant是Amazon SimpleDB的.NET对象持久性框架,用C#编写

使用Simple Savant,您可以像这样保存对象:

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!
var savant=new SimpleSavant(AwsAccessKeyId,AwsSecretAccessKey);
var客户=新客户
{Name=“Frank Berry”,PhoneNumbers=新列表{“770-555-1234”,“678-555-5678”};
savant.Put(客户);
您可以检索如下对象:

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!
var frankId=新Guid(“50a60862-09a2-450a-8b7d-5d585662990b”);
Person frank=savant.Get(frankId);//强型,无铸造!

希望这有帮助

这不是S3优化的目标


您应该使用S3来存储blob,并使用数据库(SimpleDB、Sql Server等)来“索引”S3存储。使用数据库查找您要查找的内容,从S3获取对象,进行更改,然后将其保存回去。

我通过将Lokad.Cloud中的特定名称类从Azure移植到S3解决了这个问题。

谢谢!但是,我应该澄清一下,在我们的案例中,使用SimpleDB不是一个选项。对象太大,无法存储在SimpleDB中。S3在哪些方面没有针对强类型访问进行优化?一个键可以是多个不同属性的集合,从这些属性自动创建键比手动创建键方便得多。@Yrlec-也许我误解了您想要做的事情,但正如您描述的那样,枚举大量S3键既繁琐又缓慢。