【发布时间】:2014-09-12 11:39:41
【问题描述】:
我试图估计 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。
实际上,我有 4GB 的 压缩 数据,在压缩后由 nodetool cfstats 测量。它报告的压缩比为 0.117。压缩后,它在磁盘上平均每个样本 137 字节。考虑到:
- 其中只有 88 个字节是用户数据
- 每个样本多出 34 个字节
- 这是在放气压缩之后。
所以,我的问题是:如何准确预测 Cassandra 宽行占用的磁盘空间,以及如何最小化总磁盘空间?
我正在运行单个节点,这些测试没有复制。
【问题讨论】:
标签: cassandra data-modeling cql diskspace