在 cassandra.yaml 中获取超过 max_value_size_in_mb 的值的错误

Let*_*SQL 2 cassandra nosql datastax scylla

现在我在我的 Cassandra system.log/debug.log 上观察到一些错误,并且节点在以下错误后突然关闭。

CorruptSSTableException 作为值长度超过最大值 287435456,这是通过 cassandra.yaml 中的 max_value_size_in_mb 设置的

在 Cassandra 文档中查看此值时发现:-

max_value_size_in_mb 该选项默认被注释掉。SSTables 中任何值的最大大小。早期检测 SSTable 损坏的安全措施。任何大于此阈值的值都会导致将 SSTable 标记为损坏。这应该是正数并且小于 2048。默认值:256

在我的情况下,这个值也是默认值,即 256。但我的问题是:-

1)这个值是什么意思?它是任何 SStables 的最大大小吗?2)为什么节点在超过此值或出现此错误后关闭?

提前致谢!

Iva*_*nyy 5

这个值是什么意思?

您的数据库文件(SSTable 之一)中的行大于允许的最大大小,或者 SSTable 文件已损坏,因为元数据包含超出合理限制的值(行大小)。

它是任何 SStables 的最大大小吗?

它是SSTable(表的一部分)中任何值(行)(单条数据)(键/值对)(元组)的最大允许大小。

注1:SSTable是数据库数据的一种存储格式。它只是对字符串(行)进行排序。通常,一个表由一组包含不同数据部分的 sstable 文件组成。

注 2:表格行在磁盘上的外观如何?:

Row [ Len: uint64_t, Data: char[Len] ]
Len must be < max_value_size_in_mb (256MB by default)
Run Code Online (Sandbox Code Playgroud)

为什么节点在超过此值或出现此错误后关闭?

如果发现 sstable 损坏,我不知道节点是否会关闭。从那时起,它可以将其标记为已损坏并忽略它。因此,它可能不相关。

基本上,如果有 1 个 sstables 损坏,那么您要么丢失数据,要么可能会看到以前的版本或已删除的行。因此,从一致性的角度来看,让客户端与损坏的表进行交互并不是一个很好的主意。但行为取决于数据库。