Поиск сопоставленных данных в ignite

#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, но не оба на одном узле.

Мои вопросы :

  1. Я делаю что-то неправильно при сопоставлении данных.
  2. Запуск команды visor cache -scan — правильный способ поиска сопоставленных данных на узлах?
  3. Если это неверный способ, то как мы можем определить, какие данные сопоставлены на узле 0 и узле 1?
  4. Допустим, данные сопоставлены на узле 0 (города Индии) и узле 1 (города России). Что произойдет, если один из узлов будет отключен от кластера? Произойдет ли потеря данных? Будут ли данные сопоставлены снова после перезапуска узла?

Заранее благодарю вас.

Ответ №1:

Я проверил, и Visor не будет запускать запросы локального сканирования, поэтому любой узел вернет все данные, которые присутствуют в кластере.

Таким образом, вы можете проверять сопоставление данных только с помощью кода.

При наличии резервных копий данные будут сброшены и потери данных не произойдет. При добавлении узла обратно данные будут перебалансированы на нем, а резервная копия восстановлена.

Комментарии:

1. Я пытался использовать collocated = true, но все равно он выдает все города.

2. Не могли бы вы, пожалуйста, дать мне код для печати данных с узла 0 или узла 1? К сожалению, документации по этому поводу нет .

3. Если это работает с collocated = true (и JOIN), то вы, вероятно, настроили его правильно 🙂

4. На самом деле вы не должны учитывать, находятся ли данные на узле 0 или на узле 1, это должно быть прозрачно, и большинство операций будет выполняться там, где данные находятся в кластере.

5. Позвольте мне перефразировать мое предложение: «Я пытался использовать collocated = true, но все равно он выдает все города». Это означает, что он не показывает мне ключи, которые хранятся только на узле 0 или узле 1. Отображаются все ключи. Означает, что он не работает.