这是关于Cassandra Architecture的初学者问题。
我有一个3节点的Cassandra集群。数据目录位于$ CASSANDRA_HOME / data / data。我加载了一个庞大的数据集。我在表格上加了nodetool flush
然后nodetool tablestats
我加载了数据。这表示占用的总空间约为50GiB。我很好奇并检查了每个节点上我的数据目录du $CASSANDRA_HOME/data/data
的大小,每个节点大约1-2GB。数据目录如何小于单个表占用的空间?我错过了什么吗?我的表格是使用replication factor 1
答案 0 :(得分:0)
du
给出给定路径使用的真实存储容量。这并不总是直接与存储在这些路径中的数据大小有关。
与您可能获得的任何其他存储使用信息(例如,从Cassandra获得的信息)相比,du
的输出有两个主要因素。
du
可能会给出比预期少的数字,这有两个原因:ⓐ它结合了硬链接。这意味着,如果给予它的路径包含硬链接文件(我在这里不解释硬链接,但是该术语在Unix ish操作系统中是固定的,因此可以轻松查找),这些都算在内文件多次存在时仅一次。 ⓑ知道稀疏文件;这些文件包含很大(有时是很大)的空白区域(零字节)。在许多Unix ish文件系统中,这些文件可以有效地存储,这取决于它们的创建方式。du
可能会给出比预期更大的数量,因为文件系统会有一些开销。要存储一个 n 个字节的文件,因此需要存储 n + h 个字节。 h 取决于文件系统及其配置。最重要的因素是文件系统通常以块结构存储文件。如果文件的大小不完全是文件系统的块大小的倍数,则该文件仍将完全分配最后一个所需的块,因此浪费了一些文件大小。 du
将显示已分配的整个块,因为实际上是这样。因此,在您的情况下,Cassandra可能会谈论50GiB占用的空间,但是其中很多可能是空的(从未写入)。这可能存储在文件系统上的稀疏文件中,该文件系统实际上仅使用2GiB的存储大小(du
显示)。