Cassandra:存储和检索大尺寸值(50MB到100 MB)

时间:2015-06-17 05:58:09

标签: cassandra

我想存储和检索Cassandra中的值,范围从50MB到100MB。

根据文档,当列值大小小于10MB时,Cassandra运行良好。请参阅here

我的表格如下。对此有不同的方法吗?

CREATE TABLE analysis (
    prod_id text,
    analyzed_time timestamp,
    analysis text,
    PRIMARY KEY (slno, analyzed_time)
) WITH CLUSTERING ORDER BY (analyzed_time DESC)

2 个答案:

答案 0 :(得分:4)

至于我自己的经验,虽然理论上Cassandra可以处理大块,但在实践中它可能真的很痛苦。至于我过去的一个项目,我们存储的C *中的protobuf blob范围从3kb到100kb,但是它们中有一些(~0.001%),大小高达150mb。这导致了问题:

  • 写暂停。默认情况下,C *具有10秒的写入超时,这对于大型blob来说实际上是不够的。
  • 读取超时。读取超时,读取修复,提示切换超时等问题相同。您必须调试所有这些可能的故障并提高所有这些超时。 C *必须从磁盘读取整个重行到RAM,这很慢。

我个人建议不要将C *用于大型blob,因为它不是很有效。还有其他选择:

  • 像HDFS这样的分布式文件系统。将文件的URL存储在C *中,将文件内容存储在HDFS中。
  • DSE(商业C *发行版)拥有它自己的分布式FS,在C *之上称为CFS,它可以很好地处理大文件。
  • 重新思考您的架构,以便拥有更轻的行。但这实际上取决于你当前的任务(原始问题中的信息不足)

答案 1 :(得分:1)

大值可能会有问题,因为协调器需要缓冲堆上的每一行,然后再将它们返回给客户端来回答查询。无法传输analysis_text值。

内部Cassandra也没有经过优化以便很好地处理这种用例,你必须调整很多设置以避免像shutty所描述的问题。