我正在尝试估算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个字节。这看起来非常高,考虑到:
所以,我的问题是:如何准确预测Cassandra宽行占用的磁盘空间量,以及如何最小化磁盘总空间?
我正在运行单个节点而没有复制这些测试。
答案 0 :(得分:0)
这可能是由于压实策略造成的。通过尺寸分层压实,SSTables将在压实过程中将所需空间增加一倍。对于水平压实,将需要大约10%的额外空间。根据压缩策略,您需要考虑使用的额外磁盘间隔。