概述
整体架构

SequoiaS3架构图
相关概念
存储桶是 SequoiaS3 中用于存储对象的容器。每个对象都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在 sdbs3存储桶中,则可使相应的 SDK 或者 RESTFul 接口对该对象进行访问。 存储桶是 SequoiaS3 中最高级别组织的命名空间,可用于多种用途:负责存储和数据传输,管理访问控制等。 对象是 SequoiaS3 中存储的基本实体。对象由对象数据和元数据组成,存储在巨杉数据库中。数据部分为业务系统需要存储的数据;元数据是一组描述数据部分的名称-值对,其中包括一些默认元数据和标准 HTTP 元数据(如Content-Type),用户可以在存储对象时指定自定义元数据。在存储桶中,对象将由键和版本 ID 进行唯一地标识。 键是指存储桶中对象的唯一标识符。存储桶内的每个对象都只能有一个键。存储桶、键和版本 ID 的组合唯一标识各个对象。因此,可以将 SequoiaS3 看作“存储桶 + 键 + 版本”与对象本身之间的基本数据映射。 区域是指在 SequoiaS3 中可以根据业务系统的需求按照某种规划进行数据存储,满足业务数据的隔离需求。
最佳实践
虚拟机数量:3台 | |
CPU | 1CORE |
内存 | 1GB |
磁盘 | 20GB |
操作系统 | RedHat7.4 |
进入到SequoiaS3服务安装包目录:
cd opt/sequoiadb/tools/sequoias3
修改目录中的application.properties配置文件:
#巨杉数据库连接地址,本示例中3台服务器,配置为巨杉数据库的协调节点地址sdbs3.sequoiadb.url=sequoiadb://192.168.137.46:11810,192.168.137.47:11810,192.168.137.48:11810#巨杉数据库登录用户名和密码,使用“:”分开sdbs3.sequoiadb.auth=user:password#SequoiaS3对象存储中元数据存储数据域sdbs3.sequoiadb.meta.domain=metaDomain#SequoiaS3对象存储中对象存储数据域,测试环境中元数据和对象数据域可以为同一个sdbs3.sequoiadb.data.domain=dataDomain
启动SequoiaS3服务
./sequoias3.sh start
Note: SequoiaS3服务在启动后,会生成默认管理员用户,具体账号和密码可以参考SequoiaDB安装目录 opt/sequoiadb/tools/sequoias3 中 README.txt 文件。
本次示例通过使用 Java SDK 和调用 RESTFul 接口进行演示,其中 RESTFul 接口使用 Linux 中的 curl 命令进行演示。
初始化客户端时需要使用SequoiaS3服务初始化生成的默认管理员用户,对应RESTFul接口直接在curl参数中增加相应的参数值即可。初始化客户端Java代码如下:
AWSCredentials credentials = new BasicAWSCredentials("ABCDEFGHIJKLMNOPQRST","abcdefghijklmnopqrstuvwxyz0123456789ABCD");AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endPoint, null);s3Client = AmazonS3ClientBuilder.standard().withEndpointConfiguration(endpointConfiguration).withCredentials(new AWSStaticCredentialsProvider(credentials)).build();
s3Client.createBucket("sdbbucket");
curl -v -X PUT "http://localhost:8002/sdbbucket" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD"
2.2.2 桶删除
s3Client.deleteBucket("sdbbucket");
curl -v -X DELETE "http://localhost:8002/sdbbucket" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD"
ObjectListing objectListing = s3Client.listObjects("novelbucket");List<S3ObjectSummary> objectList = objectListing.getObjectSummaries();for (int i = 0; i < objectList.size(); i++){System.out.println("key " +i + ": "+objectList.get(i).getKey());}
curl -v -X GET "http://localhost:8002" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD"
File file = new File("/home/sdbadmin/sequoiadb.txt");InputStream inputStream = new FileInputStream(file);ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(file.length());objectMetadata.setContentEncoding("utf8");objectMetadata.setContentType("text/plain");s3Client.putObject("sdbbucket","sequoiadb.txt",inputStream,objectMetadata);
curl -X PUT -T "/home/sdbadmin/sequoiadb.txt" "http://localhost:8002/sdbbucket/sequoiadb.txt" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD" -H "Content-Length:15999,Content-Encoding:utf8,Content-Type: text/plain"
GetObjectRequest request = new GetObjectRequest("sdbbucket", "sequoiadb.txt", null);S3Object result = s3Client.getS3Client().getObject(request);S3ObjectInputStream s3is = result.getObjectContent();File file = new File("/home/sdbadmin/sequoiadb_bak.txt");System.out.println("file path:" + file.getAbsolutePath());FileOutputStream fos = new FileOutputStream(file);byte[] read_buf = new byte[1024 * 1024];int read_len;while ((read_len = s3is.read(read_buf)) > 0) {fos.write(read_buf, 0, read_len);}s3is.close();fos.close();
curl -o sequoiadb_bak.tx -X GET "http://localhost:8002/sdbbucket/sequoiadb.txt" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD" -H "Content-Type: text/plain"
Java语言代码如下:
s3Client.deleteObject("sdbbucket", "sequoiadb.txt");
curl -X DELETE "http://localhost:8002/sdbbucket/sequoiadb.txt" -H "Host: localhost:8002" -H "Authorization: AWS ABCDEFGHIJKLMNOPQRST:abcdefghijklmnopqrstuvwxyz0123456789ABCD"
总结
巨杉数据库通过 SequoiaS3 提供对象存储服务,用户可以通过 AWS S3 的 Rest 接口或者Java SDK访问 SequoiaS3 实例,从而实现文件的上传、下载和删除等操作。
往期技术干货巨杉Tech | SequoiaDB高可用原理详解
巨杉Tech | 分布式数据库负载管理WLM实践
巨杉Tech | 巨杉数据库的HTAP场景实践
巨杉Tech | SequoiaDB SQL实例高可用负载均衡实践
巨杉Tech | 并发性与锁机制解析与实践
巨杉Tech | 几分钟实现巨杉数据库容器化部署
巨杉Tech | “删库跑路”又出现,如何防范数据安全风险?
巨杉Tech | 分布式数据库千亿级超大表优化实践
社区分享 | SequoiaDB + JanusGraph 实践
巨杉Tech | 巨杉数据库的并发 malloc 实现
巨杉数据库无人值守智能自动化测试实践



最后修改时间:2020-04-29 08:31:32
文章转载自巨杉数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




