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