jclouds BlobStore介绍

来源:互联网 发布:au软件的功能 编辑:程序博客网 时间:2024/06/06 00:39

译者注:此文档为初步翻译jclouds blobstore官方文档而来,对其主要结构进行了翻译,供读者入门之用。因为jclouds是跨平台的,导致各平台下可能存在同概念但汉语含义不同,所以概念解释引用我尽量使用了英文。

英文原文位置:http://jclouds.apache.org/start/blobstore/


BlobStore API是一种便捷对管理键值对存储提供者进行管理的方法,常见的键值对存储提供者有Microsoft Azure Blob Service, Amazon S3, or OpenStack Object Storage。它为你的数据提供了同步的API。

我们的API与提供者有显著不同,尽管如此,它却用一种便捷的方式提供了足够的复杂度来实现最多的工作。

 

就像其他的jclouds组件一样,你总是有方法来获取到对提供者独有接口的访问权。如果你需要功能性,很抱歉,在我们的抽象中并不包含它。

 

1.    特性

       位置敏感性(可根据声明位置控制相应位置下的数据可见性)

       可与非java客户端集成

       瞬时的提供者

       文件系统提供者

 

2.    支持哪些对象存储提供商

      

      

3.    概念

blobstore是一种键值对存储服务,就像Amazon S3,在这里你有自己的账户,你也可以创建自己的container和blob。

一个container就是一个你的数据的命名空间,而且你也可以拥有很多个container。

在container中,你可以通过指定名字,以blob的形式存储数据。在所有的blobstores中,你的account,containner和blob的组合直接关系到了HTTP URL。

 

这里有一些blobstores的要点:

       全局可寻址

       key/value数据以元数据形式存储

       可通过HTTP访问

       可以通过api按需提供

       无限扩展

       Mostare billed on a usage basis

 

3.1         container(容器)

一个container对于你的对象来说就是一个命名空间。

和服务相关的,范围可以是global,region, account, or sub-account。eg:在AmazonS3中,container被称为buckets,而且他们必须被唯一命名,所以是不会发生命名冲突的。

 

在blobstore中的所有东西都会被存到一个container中,这个container是一个http访问位置(就像一个网站)被一个URL引用。

在其他blobstores中,命名规则会宽松一些。所有的blobstores允许你列出你的container以及里边的内容,这些内容既可以是blob,也可以是folder或者virtual path。

 

3.2         blob

blob是存储在container中的非结构化数据。

一些blobstore把他们称作object,blob或者file。你可以通过一个文本键值访问到container中的blob,这些blob经常直接与被用来操作它的HTTP URL相关。blob长度既可以为0,也可以更大,一部分对象存储提供商限制了blob是大小,另一部分则不那么严格。

3.3         folder

一个folder是一个次级container,可以包含blob或者其他folder。

一个folder中的item的名称是basename.blob名称包含了folder通过一个路径分隔符”/”,同时他也和传统文件系统访问文件的方式类似。

 

3.4         virtual path

一个virtual path既可以是一个标记文件也可以是一个前缀。

不论何种情况下,他们都被单纯的用来给出平面blobstore的层次化结构展示。当你在virtual path执行一个列表,返回的blob名称就是绝对路径。

3.5         access control

访问控制

默认的,你放进container的每一个item都是私有的,如果你有兴趣将访问权给予其他人,你就必须明确的配置这些。

Exposing public containers isprovider-specific.

3.6         limitations

每一个blobstore都有它自己的限制。请阅读提供商的使用手册。

4.    使用

4.1           连接到一个BlodStore

一个连接到jclouds中blobstore的连接被称为BlobStoreContext(BlobStore会话)。他是线程安全的并且应当被多个服务的请求重用。

A BlobStoreContext associates an identityfor a provider to a set of network connections.

一个BlobStoreContext为一组网络连接组织了一个身份认证,对于每一组网络连接。

在最低限度下,你需要指定身份认证和证书,当你创建一个BlobStoreContext时。对于Amazon S3来说,你的身份认证就是Access Key ID ,证书就是 Secret Access Key.

如果你有了这些信息,那么连接到你的BlobStore服务就非常简单了:

BlobStoreContext context= ContextBuilder.newBuilder("aws-s3")

                  .credentials(identity,credential)

                 .buildView(BlobStoreContext.class);

以上代码会为你提供一个通向blobstore的连接,如果这个连接时远程连接的话,他就将会是SSL除非提供商不支持。你能通过这个会话获取的所有东西都是用同一个证书。

 

4.2           断开连接

当你不再使用BlobStoreContext,你应该通过以下代码关闭它:

context.close();

创建一个会话有许多种方式,详情参见这里(译者注:此处官网提供的网页404)。

http://javadocs.jclouds.cloudbees.net/org/jclouds/ContextBuilder.html


4.3           BlobStore API

这里提供了一个简单的同步BlobStore接口:

// Initialize theBlobStoreContext

context =ContextBuilder.newBuilder("aws-s3")

             .credentials(accesskeyid,secretaccesskey)

            .buildView(BlobStoreContext.class);

 

// Access the BlobStore

blobStore =context.getBlobStore();

 

// Create a Container

blobStore.createContainerInLocation(null,"mycontainer");

 

// Create a Blob

ByteSource payload =ByteSource.wrap("blob-content".getBytes(Charsets.UTF_8));

blob =blobStore.blobBuilder("test") // you can use folders viablobBuilder(folderName + "/sushi.jpg")

    .payload(payload)

    .contentLength(payload.size())

    .build();

 

// Upload the Blob

blobStore.putBlob(containerName,blob);

 

// Don't forget to closethe context when you're done!

context.close()

新建一个container

如果你没有,那么就去创建一个。

第一步,从你的会话中获取一个BlobStore

BlobStore blobstore =context.getBlobStore();

位置是region,provider或者其他尺度的话,在相应位置中创建的容器将会确保数据在该尺度下被找到。如果你还不在乎位置概念,那么将null作为默认值就可以

boolean created =blobStore.createContainerInLocation(null, container);

if (created) {

   // the container didn't exist, but does now

} else {

   // the container already existed

}

 

 

4.4           多部分上传

为了上传非常大的文件,提供商有可能会实现多部分上传。这里有个多部分上传的例子,使用aws-s3提供商,最大可以提供5TB大小的文件。

import staticorg.jclouds.blobstore.options.PutOptions.Builder.multipart;

 

// Initialize theBlobStoreContext

context =ContextBuilder.newBuilder("aws-s3")

                 .credentials(accesskeyid,secretaccesskey)

                .buildView(BlobStoreContext.class);

 

// Access the BlobStore

BlobStore blobStore =context.getBlobStore();

 

// Create a Container

blobStore.createContainerInLocation(null,"mycontainer");

 

// Create a Blob

ByteSource payload =Files.asByteSource(new File(fileName));

Blob blob =blobStore.blobBuilder(objectName)

    .payload(payload)

    .contentDisposition(objectName)

    .contentLength(payload.size())

   .contentType(MediaType.OCTET_STREAM.toString())

    .build();

 

// Upload the Blob

String eTag =blobStore.putBlob(containerName, blob, multipart());

 

// Don't forget to closethe context when you're done!

context.close()


4.5           日志

详情请访问:  

http://jclouds.apache.org/reference/logging/

5.    Clojure

注:这部分用法我也没太看懂,所以暂时不翻译

       安装

       使用

 

6.    高级概念

(暂未翻译)

       登录请求

       ClojureExample

       多部分上传策略

              并行多部分上传策略

              队列多部分上传策略

       大型队列

              标记文件

     Return Null onNot Found

     大文件支持

0 0
原创粉丝点击