Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 卡桑德拉行(列数较少)读取性能下降_Database_Performance_Cassandra - Fatal编程技术网

Database 卡桑德拉行(列数较少)读取性能下降

Database 卡桑德拉行(列数较少)读取性能下降,database,performance,cassandra,Database,Performance,Cassandra,我的Cassandra v1.2.5在从一行读取数据时性能下降,在这行中只有很少或零列,但以前添加和删除了许多不同的列 要进行测试,请执行以下操作: 创建新的柱族 测量一行的读取速度100次-4.6毫秒,每次读取平均毫秒,返回零列 向行中添加500000列 从行中删除所有500000 再次测量100次读取速度-平均每次读取282.4毫秒,返回零列 所以在那之后,阅读速度比之前慢了约70倍,我添加和删除了500000列 尝试压缩、冲洗、修复-没有任何帮助。速度稍微提高到208.7毫秒 唯一有助

我的Cassandra v1.2.5在从一行读取数据时性能下降,在这行中只有很少或零列,但以前添加和删除了许多不同的列

要进行测试,请执行以下操作:

  • 创建新的柱族
  • 测量一行的读取速度100次-4.6毫秒,每次读取平均毫秒,返回零列
  • 向行中添加500000列
  • 从行中删除所有500000
  • 再次测量100次读取速度-平均每次读取282.4毫秒,返回零列
所以在那之后,阅读速度比之前慢了约70倍,我添加和删除了500000列

尝试压缩、冲洗、修复-没有任何帮助。速度稍微提高到208.7毫秒

唯一有助于恢复读取性能的方法是完全删除该行。 对其他行的写入和读取仍然很快


为什么会发生这种读取速度下降?如何修复?

降级是因为墓碑。Cassandra不能只删除列,因为如果复制副本没有收到删除,当该节点重新联机时,列将重新出现。因此,Cassandra将删除存储为墓碑,这与值类似,但带有一个标记,表示列已删除

墓碑将在gc_grace_秒后删除。此时,假定所有副本都已看到删除操作,以便可以安全地删除墓碑。默认值为10天。您可以控制它(每个列族)-如果在您的用例中,您在一致性级别删除了所有列,或者恢复生命的列并不重要,您甚至可以将其降低到0


或者,如果要删除整行,可以执行行删除,而不是删除单个列。这将插入一行墓碑,在压缩后,这意味着读取该行的速度应该与从未插入现在已删除的列的速度一样快。

非常感谢您的回答!我用250万条记录做了更多的测试。试验前读数为7ms;插入和删除2.5m记录后,读取时间约为1100 ms;在我将gc_grace_seconds设置为0后,读取约630 ms;如何重新恢复7毫秒?您是否在删除之前或之后设置了gc_grace_秒?你应该先换一下。或者如果您在之后更改它,您可能需要运行“nodetool compact”。我以前做过,我甚至创建了一个gc_grace_seconds=0的新列族,我仍然有~630毫秒(是的,它比1100ms好)。是的,如果我做压缩,我会得到~7毫秒的回复。我可以立即得到7毫秒吗?似乎在任何情况下都应该执行一些压缩,而我不能立即得到7毫秒,对吗?我不认为你可以立即得到7毫秒-墓碑还可以消除已经溢出到磁盘的数据,因此即使gc_grace_seconds=0,它们仍然存储在memtable中,并且可能是SSTables。确保它们消失的唯一方法是进行全面压实。