0

我在我的应用程序中使用 cassandra,它开始占用磁盘空间的速度比我预期的要快得多,也比手动定义的要快得多。考虑这个最简单的例子:

CREATE TABLE sizer (
    id ascii,
    time timestamp,
    value float,
    PRIMARY KEY (id,time)
  ) WITH compression={'sstable_compression': ''}"

我故意关闭压缩以查看每条记录需要多少字节。

然后我插入几个值,运行nodetool flush,然后检查磁盘上数据文件的大小,看看它占用了多少空间。

结果显示巨大的空间浪费。每条记录占用 67 个字节,我不确定这怎么可能。

我的 id 长度为 13 个字节,它只在数据文件中保存一次,因为它对于测试目的总是相同的。

根据:http ://www.datastax.com/documentation/cassandra/2.0/webhelp/index.html#cassandra/architecture/architecturePlanningUserData_t.html

尺寸应为:

  • 时间戳应该是 8 个字节
  • 作为列名的值占用 6 个字节
  • 列值浮点数占用 4 个字节
  • 列开销 15 字节
  • 总计:33 个字节

为了测试起见,我的 id 总是相同的,所以如果我理解正确的话,我实际上只有 1 行。

所以,我的问题是我如何最终使用 67 个字节而不是 33 个字节。

数据文件大小正确,我尝试插入 100、1000 和 10000 条记录。大小始终为 67 字节。

4

1 回答 1

2

文件中讨论了 3 个开销。一个是您已经适应的列开销。第二个是行开销。而且,如果您的 replication_factor 大于 1,那么也有开销。

于 2013-10-26T23:33:43.547 回答