混合存储架构

(元数据索引 + 对象存储)

这是现代云原生应用中非常常见的设计模式,特别适合 处理大文件和多媒体内容

以获取航线文件为例子

航线文件是如何获取的?

  • 通过waylineId安全访问
    • 部门权限隔离
    • OSS预签名URL
    • 重定向下载
    • 数据库统一管理

首先数据库中存的有对应的oss前缀+filename,可以通过这个在OSS中找到对应的内容返回URL。数据库表中存了waylineId,客户端通过deptId+waylineId定位到对应的数据表信息,但实际数据库中并没有存真实的数据。只有通过ObjectKey到OSS获取URL,才能解析这个URL里边的kmz文件获取到航线文件信息。

航线文件获取流程

数据存储架构

数据库表 wayline_file :

主要字段

├── waylineId (航线ID,唯一标识)

├── deptId (部门ID,权限隔离)

├── objectKey (OSS对象键:前缀+filename)

├── 元数据 (name, droneModelKey, payloadModelKeys等)

└── 注意:不存储实际航线数据内容

获取流程

  1. 客户端请求
  2. 通过 deptId + waylineId 查询数据库
  3. 获取 objectKey (格式:drone-patrol/航线kmz文件_xxx.kmz) objectKey+filename
  4. 使用 objectKey 从OSS生成预签名URL
  5. 重定向到OSS URL,客户端下文件
  6. 客户端解析文件获得实际航线数据

关键特点

  • 分离存储:数据库只存储文件元数据和OSS引用,实际文件内容存储在OSS
  • 间接访问:通过waylineId间接定位文件,不直接暴露OSS路径
  • 权限隔离:通过deptId实现部门级别的访问控制
  • 按需解析:文件内容只有在实际下载后才被解析获取航线数据
  1. 文件存储分离模式 (File Storage Separation Pattern)
  • 元数据存储在数据库
  • 实际文件内容存储在对象存储服务
  1. 引用存储模式 (Reference Storage Pattern)
  • 数据库只存储文件的引用/指针
  • 不存储实际文件内容
  1. 间接访问模式 (Indirect Access Pattern)
  • 通过逻辑ID(waylineId)间接访问物理存储
  • 不直接暴露物理存储路径

架构设计术语

  1. 混合存储架构 (Hybrid Storage Architecture)

结构化数据 → 关系数据库 (MySQL) 非结构化数据 → 对象存储 (OSS)

  1. 存储抽象层 (Storage Abstraction Layer)
  • 数据库作为存储的抽象层
  • OSS作为具体的存储实现层
  1. 元数据驱动设计 (Metadata-Driven Design)
  • 数据库存储元数据和索引信息
  • 外部存储承载实际数据内容

在分布式系统中的名称

  1. 内容寻址存储 (Content-Addressed Storage, CAS)
  • 类似概念:通过地址/键值定位内容
  1. 存储代理模式 (Storage Proxy Pattern)
  • 数据库作为存储的代理和索引
  1. 文件句柄模式 (File Handle Pattern)
  • objectKey类似文件句柄,指向实际存储位置

用一句话概括

数据库存储文件索引和元数据,OSS存储实际KMZ文件内容,通过waylineId查找objectKey,再通过objectKey从OSS获取文件URL供客户端下载解析。这种设计的优势是存储成本低、访问安全可控、支持大文件存储。

可以参考[:] (如何使用STS临时访问凭证访问OSS使用STS临时访问凭证去访问阿里云OSS。可以使客户端直连OSS上传文件,而不需通过 - 掘金)

相关推荐
我不是混子2 小时前
java浮点数精度问题及解决方案
java·后端
yunxi_052 小时前
我用 Elasticsearch 做 RAG 检索的一些“土经验”
后端·llm
JaguarJack2 小时前
PHP 8.2 vs PHP 8.3 对比:新功能、性能提升和迁移技巧
后端·php
学历真的很重要2 小时前
Claude Code 万字斜杠命令指南
后端·语言模型·面试·职场和发展·golang·ai编程
稻草猫.3 小时前
Java线程安全:volatile与wait/notify详解
java·后端·idea
IT_陈寒3 小时前
Vite 5年迭代揭秘:3个核心优化让你的项目构建速度提升200%
前端·人工智能·后端
拾贰_C4 小时前
【SpringBoot】前后端联动实现条件查询操作
java·spring boot·后端
catchadmin5 小时前
PHP 快速集成 ChatGPT 用 AI 让你的应用更聪明
人工智能·后端·chatgpt·php
callJJ10 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di