如何知道cassandra用于存储推送到表中的数据的确切磁盘空间?

如何知道cassandra用于存储推送到表中的数据的确切磁盘空间?,cassandra,Cassandra,在每次写操作之后,我想做一些与cassandra使用的磁盘空间相关的测试。我在测试期间推送大量数据。 我有一个键空间和一个用cassandra创建的表。我想知道cassandra在表中推送数据时使用的磁盘空间 我注意到,当我插入一些数据时,它不会立即反映到cassandra安装目录中的数据目录中。所以我试图阻止卡桑德拉并重新启动它。因此,我可以看到在keyspace/data文件夹中创建的一些文件/目录 但是我推给卡桑德拉的数据量应该是MBs,因为它是巨大的。但数据目录的大小以KBs为单位,而提

在每次写操作之后,我想做一些与cassandra使用的磁盘空间相关的测试。我在测试期间推送大量数据。 我有一个键空间和一个用cassandra创建的表。我想知道cassandra在表中推送数据时使用的磁盘空间

我注意到,当我插入一些数据时,它不会立即反映到cassandra安装目录中的数据目录中。所以我试图阻止卡桑德拉并重新启动它。因此,我可以看到在keyspace/data文件夹中创建的一些文件/目录

但是我推给卡桑德拉的数据量应该是MBs,因为它是巨大的。但数据目录的大小以KBs为单位,而提交日志的大小为32768kb。所以,我不确定在重新启动cassandra之后是否强制将数据从提交表刷新到SS表

由于我是卡桑德拉的新手,我正在努力获取卡桑德拉使用的确切磁盘空间。我需要遵循其他步骤吗?还是卡桑德拉在内部将数据压缩到很大程度

我有一个键空间和一个用cassandra创建的表。我想知道cassandra在表中推送数据时使用的磁盘空间

可能最简单的方法是使用
du

$ du -h --max-depth=1 data
2.4M    data/system
500K    data/system_schema
0       data/system_traces
0       data/system_distributed
448K    data/system_auth
36G     data/dev
36G.    data
如果设置
max depth=2
或指定特定的键空间目录,也可以按表查看实际的磁盘使用情况

我不确定在重新启动cassandra之后是否强制将数据从提交表刷新到SS表

是的,绝对是。立即写入的数据将反映在commitlog(磁盘上)中,但在刷新memtables之前不会写入SSTable。重新启动会强制执行此过程,因为任何剩余的CommitLog都会在重新启动时进行验证

还是卡桑德拉在内部将数据压缩到很大程度

假设您基本上接受了默认设置,检查表定义应该会显示以下行:

AND compression = {'chunk_length_in_kb': '64',
 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}

与以前的版本相比,Cassandra 3存储引擎在使用磁盘空间方面非常高效。

但是,只有当memtable已满时,数据才会被推送到键空间内的数据目录中,对吗?我注意到,当我写数据停止cassandra并重新启动cassandra时,查询结果中缺少一些数据。这是否意味着数据未正确地从memtable刷新到SSTable(磁盘)?@Madhusudan是否有可能在密钥空间定义中将持久写入设置为
false
?这也是为什么你不应该重启卡桑德拉。在终止PID之前,运行
nodetool disablegossip
nodetool drain
是一种公认的做法。我尝试了“nodetool flush”将数据从MemTable刷新到SSTable,结果成功了。我也试过你建议的命令…似乎很有用。是的,由于压缩算法,数据在写入SSTable时被压缩