Minio数据模型
问题
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 |
中间前缀并没有特定的操作,因为它是属于对象的一部分,所以在对象操作中,有些操作是可以根据中间前缀来协助查询或操作对象的。