#ignite
#ignite
Вопрос:
Я пытаюсь сопоставить данные на основе SQL, приведенного по этой ссылкеhttps://ignite.apache.org/features/collocatedprocessing.html .
Я создал 2 кэша ‘Country’ и ‘City’, используя следующие SQLS.
-- Cache Country
CREATE TABLE Country (
Code CHAR(3),
Name CHAR(52),
Continent CHAR(50),
Region CHAR(26),
SurfaceArea DECIMAL(10,2),
Population INT(11),
Capital INT(11),
PRIMARY KEY (Code)) WITH "template=partitioned, backups=1";
--Cache City
CREATE TABLE City (
ID INT(11),
Name CHAR(35),
CountryCode CHAR(3),
District CHAR(20),
Population INT(11),
PRIMARY KEY (ID, CountryCode)
) WITH "template=partitioned, backups=1, affinityKey=CountryCode";
Я вставил несколько примеров записей, например :
insert into Country values('RU','Rusia','Rusia','Rusia',0.0,00,0);
insert into Country values('IND','India','Asia','Asia',0.0,00,0);
insert into City values(101,'Mumbai','IND','NA',00);
insert into City values(102,'Moscow','RU','NA',00);
Я запустил 2 узла ignite (на разных машинах) для сопоставления данных на разных узлах. После поиска записей, представленных на узле 0 через visor
cache -scan -c=@c0 -id8=@n0
Я вижу, что оба города, Мумбаи и Москва, присутствуют как на узле 0 (n0), так и на узле 1. Я ожидал, что города Индии будут расположены на узле 0, а города России будут расположены на узле 1, но не оба на одном узле.
Мои вопросы :
- Я делаю что-то неправильно при сопоставлении данных.
- Запуск команды visor cache -scan — правильный способ поиска сопоставленных данных на узлах?
- Если это неверный способ, то как мы можем определить, какие данные сопоставлены на узле 0 и узле 1?
- Допустим, данные сопоставлены на узле 0 (города Индии) и узле 1 (города России). Что произойдет, если один из узлов будет отключен от кластера? Произойдет ли потеря данных? Будут ли данные сопоставлены снова после перезапуска узла?
Заранее благодарю вас.
Ответ №1:
Я проверил, и Visor не будет запускать запросы локального сканирования, поэтому любой узел вернет все данные, которые присутствуют в кластере.
Таким образом, вы можете проверять сопоставление данных только с помощью кода.
При наличии резервных копий данные будут сброшены и потери данных не произойдет. При добавлении узла обратно данные будут перебалансированы на нем, а резервная копия восстановлена.
Комментарии:
1. Я пытался использовать collocated = true, но все равно он выдает все города.
2. Не могли бы вы, пожалуйста, дать мне код для печати данных с узла 0 или узла 1? К сожалению, документации по этому поводу нет .
3. Если это работает с collocated = true (и JOIN), то вы, вероятно, настроили его правильно 🙂
4. На самом деле вы не должны учитывать, находятся ли данные на узле 0 или на узле 1, это должно быть прозрачно, и большинство операций будет выполняться там, где данные находятся в кластере.
5. Позвольте мне перефразировать мое предложение: «Я пытался использовать collocated = true, но все равно он выдает все города». Это означает, что он не показывает мне ключи, которые хранятся только на узле 0 или узле 1. Отображаются все ключи. Означает, что он не работает.