首页 > 技术文章 > 三、swift大对象--动态大对象

yclh 2021-07-23 19:07 原文

系列导航

一、swift对象存储环境搭建

二、swift添加存储策略

三、swift大对象--动态大对象

四、swift大对象--静态态大对象

五、java操作swift对象存储(官网样例)

六、java操作swift对象存储(resultful方式实现)

七、java操作swift对象存储(动态大对象)

八、java操作swift对象存储(静态大对象)

 一、什么是swift的大对象

    简单的说就是单个文件大于5G,就属于大对象,单个文件大于5G按照普通方式上传swift就会报错(Your request is too large)。

 注:除了报错以外单独上传一个比如4G的文件需要的时间比较长,那么怎么让上传的速度增加呢?这就需要用到swift的大对象功能。

例子:

--造一个不到4.9G的文件 /opt/4G.txt
dd if=/dev/zero of=/opt/4G.txt bs=1M count=5000

--上传一个4.9G的文件耗时95秒
swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload bigContainer  /opt/4G.txt  --object-name 4G.txt

--查看物理位置
swift-get-nodes -a /etc/swift/object.ring.gz AUTH_admin bigContainer    4G.txt
-----------------------------------

--造一个5.1G的文件 /opt/5G.txt
dd if=/dev/zero of=/opt/5G.txt bs=1M count=5130

--上传一个5G的文件
swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload bigContainer  /opt/5G.txt  --object-name 5G.txt
报错: Your request is too large.

注:上面的例子可以看出文件小于5G可以正常上传,但是大于5G就会报错。

二、如何向swift上传大于5G的文件?

  使用swift的大对象功能,大对象功能又分为动态大对象和静态大对象两种,可以根据需求选择使用。

三、动态大对象


(1) 动态大对象  swift CLI 分段上传下载
--使用段的概念上传大文件
--官网说明:
swift upload test_container -S 1073741824 large_file


--例子:
swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang upload -S 1073741824 ycContainer  /opt/5G.txt  --object-name 5G.txt
注:-S的意思是把文件切割成1073741824(1G)大小的分片上传文件。            

                                                      
--查看容器列表
swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list
ycContainer
ycContainer_segments

--查看ycContainer容器
swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list  ycContainer
5G.txt

--查看ycContainer_segments容器
[root@node02 1]# swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list  ycContainer_segments
5G.txt/1591261394.734867/5379194880/1073741824/00000000
5G.txt/1591261394.734867/5379194880/1073741824/00000001
5G.txt/1591261394.734867/5379194880/1073741824/00000002
5G.txt/1591261394.734867/5379194880/1073741824/00000003
5G.txt/1591261394.734867/5379194880/1073741824/00000004
5G.txt/1591261394.734867/5379194880/1073741824/00000005
 
--下载对象5G.txt到/opt/1路径下
swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang download ycContainer 5G.txt --output /opt/1/5G.txt

(2)动态大对象 curl 进行分段上传、合并下载

 
所有对象段都必须位于同一容器中,并具有通用的对象名称前缀,并按应将其连接的顺序排序。对象名称按UTF-8字节字符串的字典顺序排序。它们不必与清单文件位于相同的容器中

curl http://127.0.0.1:8080/auth/v1.0 -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin'

curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/1.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/c.txt --data-binary '1'
curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/2.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/a.txt --data-binary '1'
curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/3.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/b.txt --data-binary '1'
 
curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67" -H 'X-Object-Manifest: containerCURL/myobject/'  http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject  --data-binary ''

 
curl -D- -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject

查看
curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL -X GET -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"
curl http://127.0.0.1:8080/v1/AUTH_admin/containerManifest -X GET -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"

删除
curl http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject    -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    
curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/a.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    
curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/b.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    
curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/c.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"       

推荐阅读