b站离线缓存删了还能找回来吗,b站卸载后缓存不见了怎么找回

首页 > 实用技巧 > 作者:YD1662023-11-01 15:21:33

司春峰

哔哩哔哩技术专家

负责B站对象存储、NoSQL、数据传输、数据库代理等方向的研发工作,致力于提供稳定可靠高性能的存储服务。

背景

BLOB(binary large object)存储,通常也被称为对象存储(OSS, object storage service)。一般用来存储文件,如视频文件、音频文件等。目前,各个云计算厂商都对外提供对象存储服务,其中以亚马逊的S3系统最著名,S3系统也成为行业的事实标准。各个云计算厂商推出的对象存储服务,也纷纷兼容S3标准。

B站由于其内容的独特性(视频网站),对象存储也有着非常多的需求。下面我们会介绍B站的对象存储的设计与实现。为了便于大家理解,会采用由简单到复杂的过程进行。我们称这个对象存储系统为BOSS(Bilibili Object Storage Service)。目标13天精通超大规模分布式对象存储系统的架构与设计。

Day1

先研读S3协议,我们会发现S3其实提供的接口非常简单,主要有PUT/GET/DEL/LIST等几种类型的接口(这里先忽略分段上传等接口)。各个接口对应的语义和term定义如下:

看到这里,假设我们有一个性能非常强大的SQL服务(比如mysql ORZ), 那么我们可以建一张表(比如表名为data_and_meta),然后将数据存入即可。

表结构

b站离线缓存删了还能找回来吗,b站卸载后缓存不见了怎么找回(1)

系统架构

此时我们的系统架构如下图所示

b站离线缓存删了还能找回来吗,b站卸载后缓存不见了怎么找回(2)

其中协议网关可以采用golang编写,解析S3协议,并转换为后端对MySQL服务的操作即可。至此,Day1的工作完成, 收工回家。

Day2

第一天在设计表结构的时候,数据和元数据都堆在一起,相互有影响。今天我们将元数据和数据拆开来。新建两张表,meta表和data表。

meta和data分离的表结构

b站离线缓存删了还能找回来吗,b站卸载后缓存不见了怎么找回(3)

如上图所示,通过object_id将meta表和数据进行关联,object id为一个int64类型(先不考虑object_id哪里来的)

优点

  1. 元数据和数据进行了分离存储
  2. 可以实现数据和元数据的分别更新(可以预见,后面需要新增字段,满足不同需求)
  3. 甚至可是实现rename操作(当然S3没有这个需求)

问题

引入Block表

针对单个data字段中的数据太长的问题,我们继续拆分,改成3张表,如下图所示

b站离线缓存删了还能找回来吗,b站卸载后缓存不见了怎么找回(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.