Несогласованное состояние кластера при программном создании семейств столбцов в Cassandra

Я сталкиваюсь с $subject при попытке динамически создавать семейства столбцов. Я использую Hector для этого и имею уровень согласованности по умолчанию. Я полагаю, причина в том, что Гектор возвращает метод создания семейства столбцов до того, как семейство столбцов будет реплицировано в кластере. Как мне справиться с этим должным образом?


person dev_nut    schedule 28.02.2012    source источник


Ответы (1)


Ты веришь? Пожалуйста, прочитайте это ссылка, в ней есть пример того, как создать семейство столбцов, а затем распечатать определение семейства столбцов. После создания семейства столбцов в кластере cassandra схема будет распространяться по узлам в кластере. Если вы хотите проверить семейство столбцов в узле cassandra, вы, вероятно, можете использовать cassandra-cli и команду show schema.

Редактировать: Судя по комментариям, решение состоит в том, чтобы обновить гектор до последней версии и вызвать метод addColumnFamily(cfdef, true); , то есть дождаться распространения схемы в кластере. Затем начните вставлять данные (имя столбца и его значение) в это семейство столбцов.

person Jasonw    schedule 01.03.2012
comment
Когда я говорю программно, я смотрю на это из кода. Я не хочу использовать cli. Та ссылка, которую вы указали, не решает проблему. Это добавление пространства ключей с помощью CF. Я хочу просто добавить CF (не удаляя пространство ключей и не теряя всех данных, которые у меня есть) динамически и убедиться, что он распространяется. Я надеюсь, что я имею смысл здесь. - person dev_nut; 02.03.2012
comment
@ TharinduMathew Извините, я не могу ясно выразиться ;-). Прежде чем я внесу это редактирование, могу ли я получить ваше подтверждение того, что именно вы пытаетесь сделать. Вы имеете в виду, что хотите динамически добавить имя столбца и его значение в существующее семейство столбцов и убедиться, что вставленный столбец распространяется по кластеру? - person Jasonw; 02.03.2012
comment
Пробую снова :). Кластер из 3 узлов Cassandra 0.7. У меня проблема с параллелизмом. Разное количество потоков пытается создать семейство столбцов и вставить данные. Поэтому я синхронизирую это, чтобы только один поток создавал семейство столбцов и проверял, что изменение распространилось по кластеру. Но этот результат несовместим с Гектором. Я частично нашел решение. Теперь я использую API-интерфейс Thrift для description_schema для проверки несогласованных версий в кластере. Но иногда он просто не распространяется по кластеру и приводит к двум версиям схемы. Любой способ приблизиться к этому? - person dev_nut; 03.03.2012
comment
Как насчет того, чтобы дождаться соглашения о схеме от самого кластера? Когда вы добавляете семейство столбцов с помощью hector, вы вызываете метод addColumnFamily(cfdef, true); , то есть ждете, пока схема не будет распространена в кластере. Затем вы можете начать вставлять данные (имя столбца и его значение) в это семейство столбцов. - person Jasonw; 05.03.2012
comment
Спасибо Джейсону. Я использую hector 0.7, у которого нет перегруженного метода. Но я взглянул на магистральный код, и он делает именно то, что я сделал с помощью Thrift API. Еще раз спасибо, это подтвердило, что мое исправление верно :) - person dev_nut; 05.03.2012
comment
Я думаю, вам действительно стоит обновить Гектора до последней версии. Однако это должно быть сделано с помощью кода гектора. - person Jasonw; 05.03.2012
comment
Я сделаю это в ближайшее время. Я еще заметил, что кластер иногда выходит из синхронизации и не восстанавливается, даже если мы ждем. Я действительно думаю, что это должно быть исправлено со стороны Кассандры. Существует обходной путь, позволяющий остановить удаление файлов схемы сервером и запустить его снова. Но это слишком много для простой задачи, тебе не кажется? - person dev_nut; 10.03.2012
comment
Ваш вопрос здесь о Гекторе, а не о Кассандре. Ну, вопросы в целом хороши, но если у нас нет конкретных вопросов, вы можете рисовать из бесконечной темы от А до Я. ;-) Я не хочу гадать, что происходит в вашем кластере cassandra, а используя cassandra -cli, у него есть команда describe cluster, в которой будут перечислены версии схемы. При этом, я думаю, вы можете проверить, все ли схемы синхронизированы в кластере. - person Jasonw; 10.03.2012