【发布时间】:2017-11-08 00:09:37
【问题描述】:
我尝试将音频/视频文件存储在数据库中。
cassandra 能做到吗?如果是,我们如何将媒体文件存储在 cassandra 中。
如何将元数据和原始音频文件存储在 cassandra 中
【问题讨论】:
标签: cassandra
我尝试将音频/视频文件存储在数据库中。
cassandra 能做到吗?如果是,我们如何将媒体文件存储在 cassandra 中。
如何将元数据和原始音频文件存储在 cassandra 中
【问题讨论】:
标签: cassandra
是的,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 中,但将实际文件内容存储在不同的对象存储实现中。
【讨论】: