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