Transactions 云环境中的数据操作

Transactions 云环境中的数据操作,transactions,azure,amazon-s3,cloud,icloud,Transactions,Azure,Amazon S3,Cloud,Icloud,我对云存储服务中的数据访问和处理有一些疑问 1.我是否可以使用任何通用API为主流云存储提供商(Amazon s3、Google云存储、Windows Azure)编写应用程序。请指出我在此列表中遗漏的提供商。我只关注企业域,而不是个人存储) 2.现在是sdk部分。如果我想编写一个在iCloud中处理数据的应用程序(比如j2ee应用程序),iCloud sdk是否为我提供了这种灵活性 3.云存储服务是否会为我提供事务支持?我指的是对ACID属性的支持。或者我必须对此负责?任何云服务提供商的基础都

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

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

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


3.云存储服务是否会为我提供事务支持?我指的是对ACID属性的支持。或者我必须对此负责?

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

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

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


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

关于您的3个问题:

  • 这实际上不是一个特定的编程问题,更像是对可用产品的调查。我不知道有哪一个库能够在所有云提供商之间提供完全通用的接口
  • 据我所知,iCloud用于存储和同步Mac/iPad/iPod内容,而不是一个计算平台
  • 我相信所有的云提供商都提供不同的关系和非关系数据存储,每个都有自己的事务支持(或者没有)。在WindowsAzure中,除了分布式事务之外,SQLAzure还提供类似于SQLServer的ACID支持。Windows Azure表存储在给定分区内提供原子操作,因此,只要您的多条记录写入到同一分区,就可以在一个原子操作中完成。SQL Azure和Windows Azure存储(Blob、表和队列)都被认为是持久的,因为存储是三重复制的冗余存储(Windows Azure存储也是地理复制的)

  • 关于问题1。如果你问你列出的所有服务是否共享一个共同的API,答案是否定的。它们都使用REST,这意味着你可以将JSON与它们中的任何一个一起使用,但调用将有不同的名称和可能的语法。

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

    • 提供了良好的存储抽象。它支持许多最常用的云存储提供商,包括Amazon s3、MS Azure等。有关存储提供商的列表,请参见此处:
    以下是如何使用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和MS等。您可以使用JDBC驱动程序连接到其中的一些服务。但这些不是“存储”服务——它们是在云中运行的数据库,每个数据库都有自己的语义