对象存储(BLOBs)在系统设计中的解释

2024/9/29 21:02:33

本文主要是介绍对象存储(BLOBs)在系统设计中的解释,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是对象存储(BLOB)?

对象存储是一种专门设计用于处理大量非结构化数据的存储类型。

如果你正在为云设计系统或处理大规模数据集,那么你就需要使用某种对象存储。

这些服务包括:

  • Amazon S3— 可能是最流行的一个,S3 是一种简单存储服务,用于存储大量文件并快速检索它们。
  • Google Cloud Storage Google Cloud 提供了一个名为 Google Cloud Storage 的对象存储服务。
  • Azure Blob Storage Azure 也提供了一个名为 Azure Blob Storage 的服务。

如你所见,一些服务,比如 Azure,也将其称为 BLOB 存储,即 二进制大对象

什么是对象?

所以,对象到底是什么呢?它其实就是一段数据。它可以是一张图片、一段视频,甚至是一整个虚拟机。

并且每个对象都带有一些基本信息:

  • 数据: 您实际存储的二进制内容。

  • 唯一标识符: 对象在存储系统中的地址。

  • 元数据: 关于对象的信息(文件名、类型、大小、创建日期等)

对象存储 vs. 数据库 vs. 文件系统

但我们为什么不用数据库来存储这些大文件呢?

好吧,我们仍然使用数据库来存储这些图像或视频文件的URI以及一些元数据,但实际文件是存储在对象存储中的。

如果你把一堆大文件放进数据库里,那会引发性能问题,我们的查询执行速度会变慢。

关于文件系统呢?我们能否将这些图片和视频存储在类似Google Drive或OneDrive的文件存储中?或者我们将它们存储在我们服务器的文件系统中并从那里读取?

文件系统非常适合本地存储和组织,但它们不像对象存储那样容易扩展。

为什么?——因为文件系统具有层次结构,意味着它们像树一样由文件夹组成,而对象存储则是扁平且无结构的——这使得它们在文件检索方面具有高度可扩展性和快速性。

BLOB 存储中的文件夹?

所以,这是否意味着对象存储中没有文件夹?

许多平台如 AWS S3 通过在对象名称中使用分隔符(例如,“photos/vacation/beach.jpg”)提供一种“文件夹”体验——这意味着它们使用正斜杠来分割对象路径,并将其表示为文件夹。

但这只是一个为了便于使用的错觉——实际上,在对象存储中并没有文件夹。

唯一标识符

正如我们所见,每个对象都会获得一个唯一的标识符(可以将桶视为对象的容器)。这个标识符通常在桶(你的对象容器)内以及特定的存储服务(如Amazon S3)中是唯一的。

然而,由于桶名必须在所有 AWS 账户中唯一,因此你的对象名在全球范围内是唯一的,而不仅仅是你在桶内的唯一。

与对象存储交互

大多数对象存储提供了与对象交互的RESTful API。你可以发送HTTP请求(PUT、GET、DELETE)来操作数据。

上传对象

例如,你可以通过发送 POST 请求或将对象直接上传到 AWS 平台上来上传对象到 S3 存储。

获取对象

同样,你可以通过发送 GET 请求或使用 AWS 控制台来读取你上传的对象。

更新对象

然而,编辑通常是通过用新版本替换整个对象来完成的。这与文件系统不同,在文件系统中,你可以就地修改文件的部分内容。

要编辑对象存储中的文件,您通常会使用 DELETE 请求删除该文件,然后使用 POST 请求创建一个更新后的文件。

此外,还有许多库和SDK可以使用不同的编程语言使此过程更简单。

概要

总之,对象存储旨在提高速度 — 它能根据对象的标识符快速定位对象。

此外,许多对象存储使用 分布式架构 来在多个存储节点之间分配流量。

经常访问的对象会被存储在更快的内存(缓存)中,以便更快地检索。

许多对象存储平台提供了诸如签名的URL和签名的cookie之类的安全功能来控制对您对象的访问。如果您想了解更多关于这些功能的工作原理,请关注我即将发布的文章。

更多免费教程请访问 Web Dev Mastery 社区。



这篇关于对象存储(BLOBs)在系统设计中的解释的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程