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
大文件支持
- jclouds BlobStore介绍
- Adrian Cole发布JClouds 1.0
- Jclouds 使用(1)安装
- 使用jclouds访问openstack的nova
- 使用 Bigtable、Blobstore 和 Google Storage 实现 GAE 存储
- jclouds项目:在云环境中简化开发流程
- 使用 Blobstore Java API 在Java App Engine 中存放大文件
- 袁芳的学习笔记(4)Predix对象数据库Blobstore
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- SVN Unable to connect to a repository at URL
- ZOJ 2965 Accurately Say "CocaCola"!
- IBOutlet 和 IBAction 区别
- 很全面的freemarker教程
- HTML&&JavaScript实现一个简单的计算器
- jclouds BlobStore介绍
- Android Studio 哪些文件不需要加入版本控制中
- Android Volley完全解析(三),定制自己的Request
- 数据收集-升级Nginx服务器,添加HTTPS过程中遇到的问题
- HOOK注入!
- tabview 的简单定义。
- mysql数据优化方案
- Android多activity间数据的传送
- Visual Studio .gitignore样例