我需要存储大量文件(例如每天数百万)。平均而言,文件为20 KB。我还需要存储这些文件的一些元数据(日期,源,分类等)。我需要能够根据元数据查询访问和检索文件(无连接,仅使用WHERE子句过滤)。写入必须快,读取时间不重要。
据我了解,我有3种可能的存储数据方式:
使用RDBMS(例如PostgreSQL)存储元数据和存储文件路径。执行查询然后从文件系统中读取匹配文件
仅使用Cassandra(我的公司使用Cassandra)。在Cassandra上存储元数据和文件内容。
一起使用Postgres + Cassandra。在Postgres上存储元数据和Cassandra键,查询Postgres并检索Cassandra键,然后从Cassandra获取实际文件内容
这些选项的优点和缺点是什么?我想我应该选择2但不能确定。
由于
答案 0 :(得分:0)
这实际上取决于文件的大小。在Cassandra中存储大文件通常不是最佳解决方案。您必须在某个时刻对文件进行分块,以使用宽行将内容存储在单独的列中。在这种情况下,最好使用像ceph这样的分布式文件系统。
但是如果文件只有20k,那么使用分布式FS的开销将不值得,Cassandra将把这一数量的数据作为blob存储在单个列中做得很好。在处理这些行时,您只需要了解内存占用。每次从Cassandra检索此类文件时,如果您不使用群集密钥使用分块,则整个内容将被加载到堆中。