云环境中的数据操作

时间:2012-05-17 16:49:43

标签: transactions azure amazon-s3 cloud icloud

我对访问和处理云存储服务中的数据存有疑虑。

1.我可以使用任何通用API为主流云存储提供商(亚马逊s3,谷歌云存储,Windows Azure)编写应用程序。请指出我在此列表中遗漏的提供商。我专注于仅限企业域,而非个人存储)

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

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

5 个答案:

答案 0 :(得分: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属性。您正在寻找的内容听起来更像是一些云数据库服务 - 亚马逊SimpleDBRDS,MS SQL Azure等。您可以使用JDBC驱动程序连接到他们中有一些。但这些不是“存储”服务 - 这些是在云中运行的数据库,每个数据库都有自己的语义。

答案 1 :(得分:1)

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

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

如何实施SDK以及它提供的功能类型,从提供商到提供商以及他们拥有的服务各不相同。您无法使用适用于Amazon Cloud的Windows Azure SDK,因为内部服务连接端点和底层接口都封装在SDK本身中。这并不意味着无法创建SDK来连接所有提供的云服务,但是每个云服务都为其云服务提供个性化的SDK。

云服务为用户提供部署其应用程序和ACID的基础架构和平台,您将不得不处理应用程序级别的工作,但ACID可能是一个完全独立且冗长的讨论。

答案 2 :(得分: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存储也是地理复制的)。

答案 3 :(得分:0)

问题1.如果您询问列出的所有服务是否共享一个通用API,请参阅。他们都使用REST,这意味着你可以使用任何一个JSON,但调用将有不同的名称和可能的语法。

答案 4 :(得分:-1)

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