Cassandra和宽行磁盘大小估计?

时间:2014-07-21 20:24:01

标签: cassandra data-modeling cql diskspace

我正在尝试估算Cassandra宽行中每列所需的空间量,但是我得到的数字却非常矛盾。

我有一个非常标准的宽行表来存储一些时间序列数据:

CREATE TABLE raw_data (
   id uuid,
   time timestamp,
   data list<float>,
   PRIMARY KEY (id, time)
);

就我而言,我在数据列表中存储了20个浮点数。

Datastax provides一些用于估算用户数据大小的公式。

regular_total_column_size = column_name_size + column_value_size + 15
row_size = key_size + 23
primary_key_index = number_of_rows * ( 32 + average_key_size )

对于此表,我们得到以下值:

regular_total_column_size = 8 + 80 + 15 = 103 bytes
row_size = 16 + 23 = 39 bytes
primary_key_index = 276 * ( 32 + 16 ) = 13248 bytes

我最感兴趣的是行如何增长,因此每列103字节是有意义的。我计算了我数据库中的所有样本,最终获得了29,241,289个独特样本。将它乘以我得到的估计raw_data表大小为3GB。

实际上,压缩后我有{4}的压缩数据,由nodetool cfstats测量。它报告压缩比为0.117。在压缩之后,它在磁盘上平均每个样本137个字节。这看起来非常高,考虑到:

  • 只有88个字节的用户数据
  • 每个样本多34个字节
  • 这是在压缩压缩之后。

所以,我的问题是:如何准确预测Cassandra宽行占用的磁盘空间量,以及如何最小化磁盘总空间?

我正在运行单个节点而没有复制这些测试。

1 个答案:

答案 0 :(得分:0)

这可能是由于压实策略造成的。通过尺寸分层压实,SSTables将在压实过程中将所需空间增加一倍。对于水平压实,将需要大约10%的额外空间。根据压缩策略,您需要考虑使用的额外磁盘间隔。