文档中心

关于 SequoiaDB

快速入门

安装

基本操作

数据模型

SQL引擎

S3引擎

系统架构

数据库管理

连接器

驱动

参考手册

故障排除

SAC 管控中心

Web服务

版本信息

Java 接口

本文档介绍如何使用 Java 接口向 SequoiaS3 发送请求及接收响应。

SequoiaS3 安装路径下的 sample 目录中有一个 maven 类型的 Java 工程样例。 使用 IDEA 打开该工程(【File】->【Open】->选中文件夹中的 Pom.xml->【Open as Project】->【Open Existing Project】->【New Window】),将 Test.java 中的 endPoint 修改为提供 S3 服务的 IP 和端口,开始使用 sample 中的样例对存储桶和对象及区域进行操作。

初始化客户端

首先修改 endPoint 的地址和端口,使其指向 SequoiaS3 的地址和端口。

String accessKey="ABCDEFGHIJKLMNOPQRST";
String secretKey="abcdefghijklmnopqrstuvwxyz0123456789ABCD";
String endPoint = "http://localhost:8002";

SequoiaS3 sequoiaS3 = SequoiaS3ClientBuilder.standard()
            .withEndpoint(endPoint)
            .withAccessKeys(accessKey, secretKey)
            .build();

AWSCredentials credentials = new BasicAWSCredentials(accessKey,secretKey);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endPoint, null);
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(endpointConfiguration)
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .build();

参数定义

String regionName = "region-example";
String bucketName = "bucketname";
String objectName = "objectname";
File file = new File("example.png");

创建区域

创建一个名为"region-example"的区域,该区域设置每年创建一个新的集合空间,在该集合空间中每月创建一个新的集合,用于存放对象数据

CreateRegionRequest request = new CreateRegionRequest(regionName)
            .withDataCLShardingType(DataShardingType.MONTH)
            .withDataCSShardingType(DataShardingType.YEAR);
sequoiaS3.createRegion(request);

获取区域列表

查询当前系统中的区域列表

ListRegionsResult listRegionsResult = sequoiaS3.listRegions();

查询区域配置

查询区域配置及区域内的存储桶列表

GetRegionResult regionResult = sequoiaS3.getRegion(regionName);
Region region = regionResult.getRegion();
List<String> buckets = regionResult.getBuckets();
System.out.println("region:" + region.toString());
for (int i=0; i < buckets.size(); i++) {
    System.out.println("Name:" + buckets.get(i));
}

创建存储桶

在 region-example 区域中创建一个名为"bucketname"的桶

s3.createBucket(bucketName, regionName );

开启版本控制

打开指定存储桶的版本控制功能

该功能未开启时,同一对象多次上传,历史记录会被覆盖,该功能开启后,同一对象多次上传的历史记录都会被记录在系统中

BucketVersioningConfiguration cfg = new BucketVersioningConfiguration("Enabled");
SetBucketVersioningConfigurationRequest request = new SetBucketVersioningConfigurationRequest(bucketName, cfg);
s3.setBucketVersioningConfiguration(request);

上传对象

从本地上传一个名为 example.png 的文件到存储桶中,并命名为"objectname"

PutObjectRequest request = new PutObjectRequest(bucketName, objectName, file);
s3.putObject(request);

获取对象

从存储桶中获得对象内容,并将对象内容存储在本地文件中

String filePath = "example.png";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
S3Object result = s3.getObject(request);
S3ObjectInputStream s3is = result.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(filePath));
byte[] read_buf = new byte[1024];
int read_len = 0;
while ((read_len = s3is.read(read_buf)) > 0) {
    fos.write(read_buf, 0, read_len);
}
s3is.close();
fos.close();

获取指定版本的对象

获取指定版本的对象,当不指定 versionId 时,获取最新版本的对象

GetObjectRequest request = new GetObjectRequest(bucketName, objectName, versionId);
S3Object object = s3.getObject(request);

查询桶内对象列表

查询存储桶中所有对象

ListObjectsV2Result result = s3.listObjectsV2(bucketName);

查询桶中所有版本

查询指定存储桶中的所有版本的对象信息,包括历史版本以及删除标记,当桶中版本记录过多,可以进行多次分批查询。

ListVersionsRequest request = new ListVersionsRequest()
                                  .withBucketName(bucketName);
VersionListing result = s3.listVersions(request);
if (result.isTruncated())
{
   result = s3.listNextBatchOfVersions(result);
}

删除对象

删除指定对象

版本功能未开启时,删除指定对象会直接将对象内容从系统中删除,版本功能开启后,删除操作会在系统中生成一个对象的删除标记,原对象内容会作为历史记录保留在系统中

s3.deleteObject(bucketName, objectName);

删除指定版本的对象

删除指定版本的对象,可以删除历史版本或删除标记,该操作会彻底删除系统中关于该版本的记录

s3.deleteVersion(bucketName, objectName, versionId);

删除桶

删除指定存储桶

s3.deleteBucket(bucketName);

删除区域

删除指定区域

sequoiaS3.deleteRegion(regionName);

查询区域是否存在

判断指定区域是否存在

Boolean isRegionExist = sequoiaS3.headRegion(regionName);
System.out.println("Region("+ regionName +") exist: " + isRegionExist);
回到顶部