【问题标题】:Storing media files in Cassandra在 Cassandra 中存储媒体文件
【发布时间】:2017-11-08 00:09:37
【问题描述】:

我尝试将音频/视频文件存储在数据库中。

cassandra 能做到吗?如果是,我们如何将媒体文件存储在 cassandra 中。

如何将元数据和原始音频文件存储在 cassandra 中

【问题讨论】:

标签: cassandra


【解决方案1】:

是的,Cassandra 绝对能够在其数据库中存储文件,作为“blob”,字节字符串。

但是,它适合这个用例:

首先,您的 blob 大小受到限制。硬限制是 2GB 大小,所以大视频是不可能的。但更糟糕的是,来自 Datastax(Cassandra 开发背后的商业公司)的文档表明即使 1 MB (!) 也太大了 - 请参阅 https://docs.datastax.com/en/cql/3.1/cql/cql_reference/blob_r.html

巨大的 blob 成为问题的原因之一是 Cassandra 没有提供用于获取其中一部分的 API - 您需要在一个 CQL 操作中读取(和写入)一个 blob,这会引发各种问题。因此,如果您想在 Cassandra 中存储大文件,您可能希望将它们分成许多小块,而不是一个大块。

下一个问题是,当数据库包含文件时,Cassandra 的一些实现效率低下(即使拆分为一堆更小的 blob)。其中一个问题是压缩算法,它最终会一遍又一遍地(对数次)复制磁盘上的所有数据;为存储文件而优化的实现将分别保存文件数据和元数据,并且仅“压缩”元数据。不幸的是,Cassandra 和 Scylla 都没有实现这种文件格式。

总而言之,您最好将元数据存储在 Cassandra 中,但将实际文件内容存储在不同的对象存储实现中。

【讨论】:

  • 您仍然可以在 Cassandra 中存储大文件,但您必须将其分解成更小的部分。
  • 请注意,正如我所指出的,将文件分成小块可以解决一些问题,但不能解决“写入放大”问题:如果将文件分成一千块,所有这几千块将在压缩过程中一次又一次地复制。对于您的用例,写入放大问题可能是可以接受的,在这种情况下,您无论如何都可以使用 Cassandra 或 Scylla 来存储大文件(拆分为碎片)。但它的效率低于不做所有那些不必要的副本而只压缩小元数据的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2012-05-25
  • 2011-12-07
相关资源
最近更新 更多