Получение ошибки для значения, превышающего max_value_size_in_mb в cassandra.yaml - PullRequest
2 голосов
/ 08 января 2020

Теперь я обнаружил некоторые ошибки в моем системном журнале Cassandra system.log / debug.log, и после ошибок, приведенных ниже, произошел внезапный ВНИЗ.

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

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

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

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

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

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

1 Ответ

5 голосов
/ 09 января 2020

Что это означает под этим значением?

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

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

Это максимально допустимый размер любого значения (строки) (Отдельный фрагмент данных) (пара ключ / значение) (кортеж) в 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 поврежден, то вы либо потеряете данные, либо увидите предыдущие версии или удаленные строки. Таким образом, с точки зрения согласованности, не очень хорошая идея разрешать клиенту взаимодействовать со сломанной таблицей. Но поведение зависит от базы данных.

...