searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ceph中对象存储的数据格式介绍

2023-08-28 10:14:15
119
0

基础的存储格式

存储引擎中存储的数据单元称为rados对象,并提供了以下两种与数据相关的rados对象:

  • omap:提供了基于KV的数据类型,可以做set/get/rm/list等操作。
  • 文件类型:提供了类似于文件系统中文件的数据类型,可以做读写数据/xattr等操作。

用户数据

当我们使用对象存储服务的时候,需要为用户开通服务,开通时会产生用户数据,每个用户数据在存储引擎中,都对应若干个rados对象,保存该用户key信息、email信息,桶列表等,其中用户key信息、email信息都是通过文件形式存储;桶列表,是通过omap形式存储。

桶数据

桶(Bucket)是存储对象的容器,所有的对象都必须隶属于某个容器。可以设置和修改容器的属性,用来控制地域、访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有对象,因此可以通过灵活创建不同的容器来完成不同的管理功能。

桶的属性通过文件的扩展属性来表示;桶中的对象列表,通过OMAP来表示。

对象数据

对象(Object)是数据存储的基本单位,一个对象是一个文件的数据与其相关属性信息(元数据)的集合体,用户上传至对象存储的数据都以对象的形式保存在桶中。文件可以是文本、图片、音频、视频等,用户可以上传、下载、删除和共享Object。

每个对象,由两部分数据组成:对象的数据和元数据。

每个对象,会被对象网关按照固定大小拆分成多个rados对象(条带)进行存储,元数据以扩展属性的形式,存储于第一个rados对象上。

根据对象数据的存储格式,可以分为两类,原子上传的对象和分段上传的对象。

原子上传的对象

用户对象被拆分成一个头对象和若干个尾对象,除了最后一个尾对象,中间对象的大小都是固定的。

头对象的命名格式:bucket-id+_+对象名称,对象的元数据保存在该头对象的扩展属性里。

尾对象的命名格式:bucket-id+_+“shadow_” + “.” + “32bit 随机字符串” + “_” + “条带编号”,其中条带编号从1开始。

示例:

上图示例中,通过s3cmd上传了一个不到14MB的文件,该文件被拆分成4个对象,一个头对象,三个尾对象,除了最后一个尾对象不足4MB,其他三个对象的大小均为4MB,而且在头对象上通过扩展属性的形式保存了该对象的元数据。

分段上传的对象

用户主动将一个对象拆分成多个分段进行上传。

对象网关将每个分段拆分成一个分段头对象和若干个尾对象,除了最后一个尾对象,中间对象的大小都是固定的。

用户的每个对象,会生成以下若干个rados对象:

  • 头对象:大小为0,bucket-id+_+对象名称,对象的元数据保存在该头对象的扩展属性里。
  • 分段头对象:bucket-id+“_” + “_multipart_” + “用户上传对象名称” + “分段上传ID” + “分段编号”,分段编号从1开始。
  • 分段尾对象:bucket-id+“_”+“_shadow_” + “用户上传对象名称” + “分段上传ID” + “分段编号” + “_” + “条带编号”,条带编号,从1开始。

示例:

在上图的示例中,用户使用s3cmd,通过分段上传(每段15MB)的方式,上传了一个不足48MB的文件,一共分了4段进行上传,除了最后一段不足15MB以外,其他的分段均为15MB。
该48MB的文件在存储引擎侧,一共被分为14个rados对象来存储,其中1个头对象(大小为0),4个分段对象,除最后一个分段对象外,前三个分段对象,都是由1个分段头对象和3个分段尾对象组成。
在头对象上,通过扩展属性保存了该对象的元数据。

0条评论
0 / 1000
z****m
2文章数
0粉丝数
z****m
2 文章 | 0 粉丝
z****m
2文章数
0粉丝数
z****m
2 文章 | 0 粉丝
原创

ceph中对象存储的数据格式介绍

2023-08-28 10:14:15
119
0

基础的存储格式

存储引擎中存储的数据单元称为rados对象,并提供了以下两种与数据相关的rados对象:

  • omap:提供了基于KV的数据类型,可以做set/get/rm/list等操作。
  • 文件类型:提供了类似于文件系统中文件的数据类型,可以做读写数据/xattr等操作。

用户数据

当我们使用对象存储服务的时候,需要为用户开通服务,开通时会产生用户数据,每个用户数据在存储引擎中,都对应若干个rados对象,保存该用户key信息、email信息,桶列表等,其中用户key信息、email信息都是通过文件形式存储;桶列表,是通过omap形式存储。

桶数据

桶(Bucket)是存储对象的容器,所有的对象都必须隶属于某个容器。可以设置和修改容器的属性,用来控制地域、访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有对象,因此可以通过灵活创建不同的容器来完成不同的管理功能。

桶的属性通过文件的扩展属性来表示;桶中的对象列表,通过OMAP来表示。

对象数据

对象(Object)是数据存储的基本单位,一个对象是一个文件的数据与其相关属性信息(元数据)的集合体,用户上传至对象存储的数据都以对象的形式保存在桶中。文件可以是文本、图片、音频、视频等,用户可以上传、下载、删除和共享Object。

每个对象,由两部分数据组成:对象的数据和元数据。

每个对象,会被对象网关按照固定大小拆分成多个rados对象(条带)进行存储,元数据以扩展属性的形式,存储于第一个rados对象上。

根据对象数据的存储格式,可以分为两类,原子上传的对象和分段上传的对象。

原子上传的对象

用户对象被拆分成一个头对象和若干个尾对象,除了最后一个尾对象,中间对象的大小都是固定的。

头对象的命名格式:bucket-id+_+对象名称,对象的元数据保存在该头对象的扩展属性里。

尾对象的命名格式:bucket-id+_+“shadow_” + “.” + “32bit 随机字符串” + “_” + “条带编号”,其中条带编号从1开始。

示例:

上图示例中,通过s3cmd上传了一个不到14MB的文件,该文件被拆分成4个对象,一个头对象,三个尾对象,除了最后一个尾对象不足4MB,其他三个对象的大小均为4MB,而且在头对象上通过扩展属性的形式保存了该对象的元数据。

分段上传的对象

用户主动将一个对象拆分成多个分段进行上传。

对象网关将每个分段拆分成一个分段头对象和若干个尾对象,除了最后一个尾对象,中间对象的大小都是固定的。

用户的每个对象,会生成以下若干个rados对象:

  • 头对象:大小为0,bucket-id+_+对象名称,对象的元数据保存在该头对象的扩展属性里。
  • 分段头对象:bucket-id+“_” + “_multipart_” + “用户上传对象名称” + “分段上传ID” + “分段编号”,分段编号从1开始。
  • 分段尾对象:bucket-id+“_”+“_shadow_” + “用户上传对象名称” + “分段上传ID” + “分段编号” + “_” + “条带编号”,条带编号,从1开始。

示例:

在上图的示例中,用户使用s3cmd,通过分段上传(每段15MB)的方式,上传了一个不足48MB的文件,一共分了4段进行上传,除了最后一段不足15MB以外,其他的分段均为15MB。
该48MB的文件在存储引擎侧,一共被分为14个rados对象来存储,其中1个头对象(大小为0),4个分段对象,除最后一个分段对象外,前三个分段对象,都是由1个分段头对象和3个分段尾对象组成。
在头对象上,通过扩展属性保存了该对象的元数据。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0