在cassandra.yaml中获取值超过最大值大小(mb)时出错

g0czyy6m  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(673)

现在我在cassandra system.log/debug.log上观察到一些错误,在出现以下错误之后,节点突然关闭。
corruptsstableexception值长度超过最大值287435456,该值是通过cassandra.yaml中的max\u value\u size\u in\u mb设置的
在研究Cassandra文献中的这个值时发现:-
最大\u值\u大小\u(mb)默认情况下,此选项被注解掉。sstables中任何值的最大大小。早期发现sstable损坏的安全措施。任何大于此阈值的值大小都将导致将sstable标记为已损坏。这应该是正的,小于2048。默认值:256
在我的例子中,这个值也是默认值256。但我的问题是:-
1) 这个值是什么意思?它是任何table的最大尺寸吗?2) 为什么节点在超过此值或发生此错误后关闭?
提前谢谢!

qyuhtwio

qyuhtwio1#

这个值是什么意思?
数据库文件(sstables之一)中的行大于允许的最大大小,或者sstable文件已损坏,因为元数据包含的值(行大小)超出了合理的限制。
它是任何table的最大尺寸吗?
它是sstable(表的一部分)中任何值(行)(单个数据段)(键/值对)(元组)允许的最大大小。
注1:sstable是数据库的数据存储格式。它只是对字符串(行)进行排序。通常,一个表由一组包含不同数据部分的sstable文件组成。
注2:磁盘上的表行是什么样子的

Row [ Len: uint64_t, Data: char[Len] ]
Len must be < max_value_size_in_mb (256MB by default)

为什么节点在超过此值或发生此错误后关闭?
我不知道如果一个节点发现损坏的sstable,它是否会关闭。它可能只是将其标记为已损坏并从那时起忽略它。因此,它可能不相关。
基本上,如果有1个sstables损坏,那么您要么丢失数据,要么可能看到以前的版本或删除的行。因此,从一致性的Angular 来看,允许客户机与损坏的表进行交互不是一个好主意。但行为取决于数据库。

相关问题