混合存储架构

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

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

以获取航线文件为例子

航线文件是如何获取的?

  • 通过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上传文件,而不需通过 - 掘金)

相关推荐
凤山老林24 分钟前
排序算法:详解插入排序
java·开发语言·后端·算法·排序算法
低音钢琴44 分钟前
【SpringBoot从初学者到专家的成长18】SpringBoot中的数据持久化:JPA与Hibernate的结合
spring boot·后端·hibernate
paopaokaka_luck1 小时前
基于SpringBoot+Vue的社区诊所管理系统(AI问答、webSocket实时聊天、Echarts图形化分析)
vue.js·人工智能·spring boot·后端·websocket
李慕婉学姐1 小时前
Springboot黄河文化科普网站5q37v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
道之极万物灭1 小时前
Go基础知识(一)
开发语言·后端·golang
Victor3562 小时前
Redis(71)如何确保Redis分布式锁的可靠性?
后端
Victor3562 小时前
Redis(70)分布式锁的超时机制如何实现?
后端
时间行者_知行合一2 小时前
我们讲讲MCP, FuncionCall和Agent
后端
metikos2 小时前
基于LangChain实现RAG的离线部分
后端
武子康2 小时前
大数据-129 - Flink CEP详解:实时流式复杂事件处理(Complex Event Processing)全解析
大数据·后端·flink