1

我对在云存储服务中访问和处理数据有一些疑问。

1.是否有任何通用 API 可用于为主流云存储提供商(Amazon s3、Google 云存储、Windows Azure 编写应用程序。请指出我在此列表中遗漏的提供商。我只专注于企业域,而不是个人存储)

2.现在是sdk部分。如果我想编写一个在 iCloud 中处理数据的应用程序(让我们说一个 j2ee 应用程序),iCloud sdk 是否为我提供了那种灵活性?

3.云存储服务会为我提供交易支持吗?我的意思是支持ACID属性。或者我必须对此负责?

4

5 回答 5

2

以下是如何使用 jClouds 存储上下文:



    import static 
        org.jclouds.aws.s3.options.PutObjectOptions.Builder.withAcl;

    // get a context with amazon that offers the portable BlobStore API
    BlobStoreContext context = new BlobStoreContextFactory().
                         createContext("aws-s3", accesskeyid, secretkey);

    // create a container in the default location
    BlobStore blobStore = context.getBlobStore();
    blobStore.createContainerInLocation(null, bucket);

    // add blob
    Blob blob = blobStore.newBlob("test");
    blob.setPayload("test data");
    blobStore.putBlob(bucket, blob);

    // when you need access to s3-specific features,
    // use the provider-specific context
    AWSS3Client s3Client =
         AWSS3Client.class.cast(context.getProviderSpecificContext().getApi());

    // make the object world readable
    String publicReadWriteObjectKey = "public-read-write-acl";
    S3Object object = s3Client.newS3Object();

    object.getMetadata().setKey(publicReadWriteObjectKey);
    object.setPayload("hello world");
    s3Client.putObject(bucket, object, withAcl(CannedAccessPolicy.PUBLIC_READ));

    context.close();

  • 不是真正的 iCloud 专家,但我的印象是它只用于各种苹果产品,而不是一个通用平台,正如之前的回答中提到的那样。
  • 云存储服务通常不提供 ACID 属性。您正在寻找的内容听起来更像是一些云数据库服务——Amazon SimpleDBRDS、MS SQL Azure等。您可能可以使用 JDBC 驱动程序来连接其中的一些。但这些不是“存储”服务——它们是在云中运行的数据库,每个都有自己的语义。
于 2012-05-29T07:52:58.137 回答
1

任何云服务提供商的基础都是使用 REST 接口。您可以使用任何语言来包装 REST 请求,只要该语言支持网络和 PKI 安全基础设施。所有现代语言都有这样的功能。

大多数情况下,任何 SDK 都只是这些 REST 接口的包装器,因此您可以非常轻松地编写编码器和同步或异步方式并获得所需的内容。SDK 只是将工作加速到多方面,与直接使用 REST 相比。这并不意味着您不能直接使用 REST,它只是一个 SDK 可以帮助您连接到特定的云服务。

SDK 是如何实现的以及它提供了什么样的功能,因供应商和他们所拥有的服务而异。您不能使用适用于 Amazon Cloud 的 Windows Azure SDK,因为内部服务连接端点和底层接口都封装在 SDK 本身中。这并不意味着不能创建 SDK 来连接所有云服务提供,而是每个云服务都为其云服务提供个性化的 SDK。

云服务为您的用户提供基础设施和平台来部署他们的应用程序,关于 ACID,您必须处理应用程序级别的工作,但是 ACID 可能是一个完全独立且冗长的讨论。

于 2012-05-17T17:34:44.643 回答
0

对于问题 1。如果您要询问您列出的所有服务是否共享一个公共 API,没有。它们都使用 REST,这意味着您可以将 JSON 与它们中的任何一个一起使用,但调用将具有不同的名称和可能的语法。

于 2012-05-18T17:05:39.383 回答
0

关于你的3个问题:

  1. 这实际上并不是一个特定的编程问题,更像是对可用产品的调查。我不知道有任何特定的库可以跨所有云提供商提供完全通用的接口。
  2. 据我了解,iCloud 用于存储和同步您的 Mac/iPad/iPod 内容,而不是计算平台。
  3. 我确信所有云提供商都提供不同的关系和非关系数据存储,每个都有自己的事务支持(或缺乏)。在 Windows Azure 中,除了分布式事务之外,SQL Azure 还提供类似于 SQL Server 的 ACID 支持。Windows Azure 表存储在给定分区内提供原子操作,因此只要将多记录写入写入同一个分区,就可以在一个原子操作中完成。SQL Azure 以及 Windows Azure 存储(blob、表和队列)被认为是持久的,因为存储是三重复制以实现冗余(并且 Windows Azure 存储也是异地复制)。
于 2012-05-18T02:21:16.963 回答
-1

您只能通过 Apple 的适用于 iOs 和 Mac OS X 的 SDK 使用 iClous。我几乎可以肯定您无法从 j2ee 应用程序访问它。

于 2012-05-19T07:11:26.780 回答