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 中删除大量数据后,磁盘空间未更改