对象存储为何能呈现文件夹?与文件系统文件夹有何区别?
本质结构不同
本地文件系统是层级树状结构,文件夹是真实存在的目录实体,作为文件的容器,有独立的元数据(比如创建时间、权限)。而对象存储(如AWS S3、GCP Cloud Storage)是扁平的键值对存储,不存在真正的文件夹实体——控制台显示的“文件夹”,本质是对象键名中的前缀(比如对象键为photos/summer/2024.jpg,photos/和photos/summer/就是被识别为“文件夹”的前缀)。创建逻辑不同
本地必须先创建文件夹,才能向其中存放文件;对象存储完全不需要提前创建“文件夹”,直接上传带前缀的对象即可,控制台会自动根据前缀渲染出文件夹的视觉效果。如果要在控制台手动创建“空文件夹”,实际上是上传了一个键名以/结尾的空对象(比如docs/),但这个空对象只是个占位符,并非真正的目录容器。存储占用不同
本地文件夹本身会占用少量存储空间,用于存储目录元数据;对象存储中,仅靠前缀模拟的“文件夹”不占用任何存储空间,只有手动创建的空对象式“文件夹”会占用极小的存储(仅存储空对象的元数据)。操作行为不同
本地删除文件夹时,必须先清空其中的所有文件,否则无法删除;对象存储中,删除“文件夹”分两种情况:如果是手动创建的空对象,删除后只是移除了那个占位符,所有带该前缀的对象依然存在(控制台不再显示该文件夹,但文件可通过完整键名访问);如果是通过控制台的“删除文件夹”功能,本质是批量删除所有带有该前缀的对象。访问性能不同
本地访问文件夹内的文件,需要遍历层级目录结构,层级越深,查找效率可能越低;对象存储通过完整键名直接定位对象,前缀查询是基于键的批量匹配,性能不受“文件夹”层级深度的影响,无论前缀有多少层,访问速度都一致。
内容的提问来源于stack exchange,提问作者Tarun Gupta

