Получение ошибки для значения, превышающего max_value_size_in_mb в cassandra.yaml

Теперь я заметил некоторые ошибки в моем файле system.log/debug.log Cassandra, и узел внезапно перестал работать после следующих ошибок.

CorruptSSTableException, поскольку длина значения превышает максимум 287435456, который устанавливается через max_value_size_in_mb в cassandra.yaml

При просмотре этого значения в документации Cassandra было обнаружено: -

max_value_size_in_mb Этот параметр по умолчанию закомментирован. Максимальный размер любого значения в SSTables. Мера безопасности для раннего обнаружения повреждения SSTable. Любой размер значения, превышающий этот порог, приведет к тому, что SSTable будет помечен как поврежденный. Оно должно быть положительным и меньше 2048. Значение по умолчанию: 256.

В моем случае также это значение по умолчанию, равное 256. Но мои вопросы: -

1) Что означает это значение? Это максимальный размер любых SStables? 2)Почему узел был недоступен после превышения этого значения или после этой ошибки?

Заранее спасибо!


person LetsNoSQL    schedule 08.01.2020    source источник


Ответы (1)


Что подразумевается под этим значением?

Либо в вашем файле базы данных (одной из таблиц SSTable) есть строка, размер которой превышает разрешенный максимальный размер, либо файл SSTable поврежден, поскольку метаданные содержат значения (размер строки), превышающие разумные пределы.

Это максимальный размер любых SStables?

Это максимально допустимый размер любого значения (строка) (отдельный фрагмент данных) (пара ключ/значение) (кортеж) в SSTable (часть таблицы).

Примечание 1: SSTable — это формат хранения данных для базы данных. Он просто отсортировал строки (строки). Обычно таблица состоит из набора стабильных файлов, содержащих разные части данных.

Примечание 2: Как строка таблицы может выглядеть на диске? :

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

Почему узел был недоступен после превышения этого значения или после этой ошибки?

Я точно не знаю, отключится ли узел, если обнаружит поврежденный sstable. Он может просто пометить его как поврежденный и с тех пор игнорировать. Таким образом, это может быть не связано.

По сути, если 1 из ваших sstables повреждена, вы либо потеряете данные, либо увидите предыдущие версии или удаленные строки. Итак, с точки зрения согласованности, не очень хорошая идея позволять клиенту взаимодействовать с неработающей таблицей. Но поведение зависит от базы данных.

person Ivan Prisyazhnyy    schedule 09.01.2020
comment
Спасибо @Ivan за ваш ответ. Так это просто значение любых полей таблицы, верно? который по умолчанию 256 мб. если какое-либо значение таблицы, превышающее этот предел, cassandra будет рассматривать этот sstable (где это значение находится) как поврежденный, так что насчет данных, которые существуют в этом sstable. Будет ли это потеря данных? А если запустить уплотнение, то и та таблица тоже уплотнится? В моем случае Node был закрыт после этой ошибки. - person LetsNoSQL; 10.01.2020