在Cassandra中存储媒体文件

时间:2017-11-07 15:08:34

标签: cassandra

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

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

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

1 个答案:

答案 0 :(得分:7)

是的,Cassandra绝对能够将文件存储在其数据库中,作为" blobs",字符串。

但是,对于此用例,非常理想:

首先,你的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中存储大型文件,您可能希望将它们分成许多小blob - 而不是一个大blob。

下一个问题是,当数据库包含文件时,某些Cassandra的实现效率很低(即使分成一堆较小的blob)。其中一个问题是压缩算法,它最终会在磁盘上反复复制所有数据(对数次数);针对存储文件进行了优化的实现将分别保存文件数据和元数据,并且只有" compact"元数据。不幸的是,Cassandra和Scylla都没有实现这样的文件格式。

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