存储对象时需要元数据存储

Need for metadata store while storing an object

在检查 pastebin 等服务的设计时,我注意到了两种不同存储系统的使用情况:

  1. 用于存储实际“粘贴”数据的对象存储(例如 Amazon S3)
  2. 元数据存储,用于存储与该“粘贴”数据相关的其他内容;例如 - URL 哈希(访问粘贴数据),引用实际粘贴数据等

我正在尝试了解对此元数据存储的需求。

这是通常推荐的方式吗?我们从使用元数据存储中获得的任何特定优势?

对象存储系统是否不允许将元数据与实际对象一起存储在同一存储服务器中?

对象存储系统通常允许将相当多的元数据附加到对象。

但是您的元数据受对象存储的支配。

  • 您的元数据搜索仅限于对象存储允许的内容。
  • 分析、通知(a-la inotify)等仅限于对象存储允许的内容。
  • 如果您想从 S3 迁移到 Google 云存储,或两者都执行,则必须规范化您的元数据。
  • 您的元数据大小限制仅限于对象存储。
  • 您不能执行跨对象存储元数据(例如,引用多个粘贴数据的 link)。
  • 您可能无法拥有二进制元数据。

通常情况下,元数据既非常重要,又被业务大量使用,因此它与数据具有不同的使用特性,因此将其存储在具有不同特性的存储中是有意义的。

我在任何地方都找不到 pastebin.com 是如何赚钱的,所以我不知道他们使用元数据的程度有多大,但仅仅是查找,URL 和粘贴数据之间的转换,是仅靠对象存储是无法安全完成的事情。

上面的答案很好,只是补充一下 - 另外两个优点是分别缓存和扩展两个存储系统。

  1. 如果你只使用一个对象存储,并且说一个粘贴是 5 MB,你会缓存所有它吗?元数据存储还允许通过缓存前 10 或 100 KB 的数据来改善用户体验,以便粘贴供用户预览,同时在后台获取完整的对象。此上限还有助于确定性地设计缓存。
  2. 您还可以根据性能/容量需求相互独立地扩展对象存储和元数据存储。元数据存储中的查找也将更快,因为它体积更小。

您的担心是合理的,将存储分成 2 个表(或介质)确实会增加一些延迟,但这始终是系统设计的妥协,几乎没有 Win-Win 情况。