Cassandra数据存储:数据目录空间不等于占用空间

Posted

技术标签:

【中文标题】Cassandra数据存储:数据目录空间不等于占用空间【英文标题】:Cassandra Data storage: data directory space not equal to the space occupied 【发布时间】:2018-03-04 12:27:02 【问题描述】:

这是关于 Cassandra 架构的初学者问题。

我有一个 3 节点 Cassandra 集群。数据目录位于 $CASSANDRA_HOME/data/data。我已经加载了一个巨大的数据集。我做了nodetool flush 然后nodetool tablestats 在我加载数据的表上。这表示占用的总空间约为 50GiB。我很好奇并检查了每个节点上我的数据目录du $CASSANDRA_HOME/data/data 的大小,每个节点显示大约 1-2GB。数据目录怎么会小于单个表占用的空间?我错过了什么吗?我的表是用replication factor 1创建的

【问题讨论】:

50Gb 什么样的数据?压缩在这里发挥了重要作用。 我的问题更倾向于,即使在压缩时,它是否应该在两个地方都反映相同? @xmas79 未启用压缩。 压缩从一开始就被禁用了吗?请发布 YAML 配置 【参考方案1】:

du 给出了分配给它的路径所使用的真实存储容量。这并不总是与这些路径中存储的数据大小直接相关。

与您可能获得的任何其他存储使用信息(例如,来自 Cassandra)相比,有两个主要因素混淆了 du 的输出。

    du 给出的数字可能比预期的要小,原因有两个: ⓐ 它结合了硬链接。这意味着如果给它的路径包含硬链接文件(我不会在这里解释硬链接,但这个术语是 Unixish 操作系统的固定术语,因此可以轻松查找),这些都被计算在内只有一次,而文件存在多次。 ⓑ 知道稀疏文件;这些文件包含大量(有时是巨大的)空白区域(零字节)。在许多 Unixish 文件系统中,这些文件可以有效地存储,具体取决于它们的创建方式。 du 可能会给出比预期更大的数字,因为文件系统有一些开销。因此,要存储 n 个字节的文件,需要存储 n + h 个字节。 h 取决于文件系统及其配置。最重要的因素是文件系统通常以块结构存储文件。如果一个文件的大小不完全是文件系统块大小的倍数,则最后需要的块仍然由该文件完全分配,因此如果浪费了它的一些大小。 du 将显示整个块已分配,因为事实上,它是。

因此,在您的情况下,Cassandra 可能会谈论占用 50GiB 的空间,但其中很多可能是空的(从不写入)空间。这可能存储在文件系统上的稀疏文件中,实际上只使用 2GiB 的存储大小(du 显示)。

【讨论】:

以上是关于Cassandra数据存储:数据目录空间不等于占用空间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Cassandra来存储time-series类型的数据

通过压缩和修复从 Cassandra db 中删除大量数据后,磁盘空间未更改

Cassandra实战 笔记-《Cassandra内部数据存储结构》

postgresql查看数据库占用的物理存储空间大小

删除 cassandra 数据后磁盘空间不减少

spring-data-cassandra 存储库的多个键空间支持?