【问题标题】:Strongly typed access to Amazon S3 using C#使用 C# 对 Amazon S3 的强类型访问
【发布时间】:2011-05-25 14:15:54
【问题描述】:

我目前正在将 Windows Azure 应用程序迁移到 Amazon AWS。在 Windows Azure 中,我们使用Lokad.Clout 来获得对 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
}

有关更详细的示例,请参阅their wiki

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

是否有任何与 Lokad.Cloud for Azure 等效的 S3?

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

【问题讨论】:

    标签: c# azure amazon-s3 amazon-web-services blob


    【解决方案1】:

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

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

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

    使用 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!
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢!但是,我应该澄清一下,在我们的案例中使用 SimpleDB 不是一个选项。对象太大而无法存储在 SimpleDB 中。
    【解决方案2】:

    这不是 S3 优化的对象。

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

    【讨论】:

    • S3 在什么方面没有针对强类型访问进行优化?密钥可以是多个不同属性的聚合,从这些属性自动创建密钥比手动创建密钥要方便得多。
    • @Yrlec - 也许我误解了你想要做什么,但正如你所描述的那样,枚举大量 S3 密钥既乏味又缓慢。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多