MinIO是一个对象存储解决方案,那么什么是对象呢?
桶: MinIO 对象存储使用 buckets 来组织对象。 存储桶类似于文件系统中的顶级驱动器、文件夹或目录 (/mnt/data
or C:\
) ,其中每个存储桶可以容纳任意数量的对象。
以顶级驱动器(盘符)作为桶比较好理解,这好比提前设定了一种约定,约定某个盘符下只能存放某种格式或某种业务产生的对象。例如可以约定在 C:\
下只存放系统相关文件,在 D:\
下只存放工作相关文件,在 E:\
下只存放娱乐相关文件。
在现实工作中,使用盘符作为区分,显然过于浪费。因此常常会是由文件夹(目录)来存放符合某一约定的文件。如下,在 D:\A
下创建了 iamghes
、videos
、articles
。它们此时类似于 MinIO 中的桶。
D:\A
├─images
│ ├─ ...
│ └─ a.png
├─videos
│ ├─ ...
│ └─ b.mp4
└─articles
├─ ...
└─ c.doc
对象: 是二进制数据,例如图像、音频文件、电子表格,甚至是二进制可执行代码。如 App.exe 、user.png、销售单.xls、BigBigWord.mp4 等都是对象。
对象可以直接存储在桶下,之间没有文件夹;也可以不同的文件层次存储在文件夹下。如下,在桶 images 中,a.png 直接存储在桶下。01.png、02.png、03.png 存储在 svc01 文件夹中。
├─images
├─svc01
│ ├─ ...
│ ├─ 01.png
│ ├─ 02.jpge
│ └─ 03.jpge
└─ a.png
在 MinIO 中 , 对象可以精确地表述为 imgaes/a.png
或 imges/svc01/01.png
,其中 images
为桶,/
或 /svc01/
为中间路径, a.png
或 01.png
为对象名。
对象的完整表述 为 中间路径 + 对象名
,其中 中间路径
可以为空,可以为多层路径 ,如/a/.../n/
。
中间前缀: 上述的 中间路径
即为中间前缀。中间前缀是对象的一部分,它经常根据业务被定义为不同的层次,用于唯一描述对象。注意 !!!与普通文件系统不一样的是,中间前缀并不会有使用占用内存大小、最后操作时间等信息,只有对象有。
中间前缀只是MinIO存储对象时根据 \
切分的文件层次,它不是目录或文件夹,只是逻辑存在。
就数据模型而言,MinIO 中只有桶和对象两种数据模型,因此MinIO 中所有操作都是围绕它们展开的。桶和对象的操作列表如下:
桶操作(Bucket operations) | 对象操作(Object operations) |
---|---|
bucketExists | composeObject |
deleteBucketEncryption | copyObject |
deleteBucketLifecycle | deleteObjectTags |
deleteBucketNotification | disableObjectLegalHold |
deleteBucketPolicy | downloadObject |
deleteBucketReplication | enableObjectLegalHold |
deleteBucketTags | getObject |
deleteObjectLockConfiguration | getObjectRetention |
getBucketEncryption | getObjectTags |
getBucketLifecycle | getPresignedObjectUrl |
getBucketNotification | getPresignedPostFormData |
getBucketPolicy | isObjectLegalHoldEnabled |
getBucketReplication | listObjects |
getBucketTags | putObject |
getBucketVersioning | removeObject |
getObjectLockConfiguration | removeObjects |
listBuckets | restoreObject |
listenBucketNotification | selectObjectContent |
makeBucket | setObjectRetention |
removeBucket | setObjectTags |
setBucketEncryption | statObject |
setBucketLifecycle | uploadObject |
setBucketNotification | uploadSnowballObjects |
setBucketPolicy | |
setBucketReplication | |
setBucketTags | |
setBucketVersioning | |
setObjectLockConfiguration |
中间前缀并没有特定的操作,因为它是属于对象的一部分,所以在对象操作中,有些操作是可以根据中间前缀来协助查询或操作对象的。