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

问题描述 投票:1回答:1

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

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

memory cassandra disk nodetool du
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.