Мне показалось, что недавно я столкнулся с довольно интересной проблемой, исследуя свою предыдущую проблему - One ColumnFamily размещает данные только на 3 из 4 узлов
У нас был очень длинный ряд с более чем 800 000 столбцов. В нем хранятся данные пользователя; один столбец на данные одного пользователя. Если не разбираться в причинах такой конструкции, согласно документации, это должно быть нормально, однако у нас были серьезные проблемы с производительностью.
Казалось, что вся строка была кеширована кешем операционной системы, а Cassandra - потому что это была довольно часто используемая строка - тратила большую часть времени ЦП на сериализацию строки, чтобы получить из нее данные (хотя приложения запросы касались определенного столбца в строке).
Первое, что я сделал, - это включил кеширование строк в ColumnFamily, в котором хранится эта строка. Это, казалось, мгновенно решило проблему высокой загрузки процессора и решило проблемы с производительностью ... До первого планового ремонта вручную.
В какой-то момент во время ручного ремонта (воспроизводимого; это происходило каждый раз, когда я пытался запустить ручное восстановление), узел терял связь с другими узлами (и наоборот!), И все затронутые узлы (обычно два из четырех) сообщали, что куча почти заполнена (куча заполнена 0.9977127109734825 ...). Затронутые узлы просто умирали (например, Cassandra, а не сам хост).
Мы решили основную проблему - изменили способ хранения данных в проблемном ColumnFamily, однако я до сих пор не понимаю, почему я столкнулся с этими проблемами, и был бы признателен, если бы кто-нибудь мог пролить свет на потенциальный источник проблемы?
Было ли что-то действительно плохое в том, что мы сделали?
Мы используем 0.8.7, кластер из 4 узлов и RF = 3. Куча установлена на 16 ГБ, а это коробки на 48 ГБ.