Перейти к основному содержимому
Версия: 2.0.x

Добавление меток на BE

Начиная с версии 3.2.8, Selena поддерживает добавление меток на BE. При создании таблицы или асинхронного материализованного представления вы можете указать метку определённой группы узлов BE. Это гарантирует, что replica данных будут распределены только на узлах BE, связанных с этой меткой. Replica данных будут равномерно распределены между узлами с одинаковой меткой, что повышает высокую доступность данных и изоляцию ресурсов.

Использование

Добавление меток на BE

Предположим, что один cluster Selena включает шесть BE, которые равномерно распределены по трём стойкам. Вы можете добавить метки на BE в зависимости от стоек, где расположены BE.

ALTER SYSTEM MODIFY BACKEND "172.xx.xx.46:9050" SET ("labels.location" = "rack:rack1");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.47:9050" SET ("labels.location" = "rack:rack1");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.48:9050" SET ("labels.location" = "rack:rack2");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.49:9050" SET ("labels.location" = "rack:rack2");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.50:9050" SET ("labels.location" = "rack:rack3");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.51:9050" SET ("labels.location" = "rack:rack3");

После добавления меток вы можете выполнить SHOW BACKENDS; и просмотреть метки BE в поле Location возвращаемого результата.

Если вам нужно изменить метки BE, вы можете выполнить ALTER SYSTEM MODIFY BACKEND "172.xx.xx.48:9050" SET ("labels.location" = "rack:xxx");.

Использование меток для указания распределения данных таблицы на узлах BE

Если вам нужно указать места, куда будут распределены данные таблицы, например, распределение данных таблицы по двум стойкам, rack1 и rack2, вы можете добавить метки к таблице.

После добавления меток все replica одного tablet в таблице распределяются по меткам по принципу Round-Robin. Более того, если несколько replica одного tablet существуют в рамках одной метки, эти replica будут распределены как можно более равномерно между разными BE в этой метке.

примечание
  • Если общее количество узлов BE, связанных с метками, меньше количества replica, система в первую очередь обеспечит достаточное количество replica. В этом случае replica могут быть распределены не так, как указано в метке.
  • Метка, которую нужно связать с таблицей, должна уже существовать. В противном случае произойдёт ошибка Getting analyzing error. Detail message: Cannot find any backend with location: rack:xxx.

При создании таблицы

Вы можете использовать свойство "labels.location" для распределения данных таблицы по rack 1 и rack 2 при создании таблицы:

CREATE TABLE example_table (
order_id bigint NOT NULL,
dt date NOT NULL,
user_id INT NOT NULL,
good_id INT NOT NULL,
cnt int NOT NULL,
revenue int NOT NULL
)
PROPERTIES
("labels.location" = "rack:rack1,rack:rack2");

Для вновь созданных таблиц значение по умолчанию свойства таблицы labels.location равно *, что означает, что replica равномерно распределяются по всем меткам. Если распределение данных вновь созданной таблицы не должно учитывать географическое расположение серверов в cluster, вы можете вручную установить свойство таблицы "labels.location" = "".

После создания таблицы

Если вам нужно изменить место распределения данных таблицы после её создания, например, изменить место на rack 1, rack 2 и rack 3, вы можете выполнить следующий оператор:

ALTER TABLE example_table
SET ("labels.location" = "rack:rack1,rack:rack2,rack:rack3");
примечание

Если вы обновили Selena до версии 3.2.8 или более поздней, для исторических таблиц, созданных до обновления, данные по умолчанию не распределяются на основе меток. Если вам нужно распределить данные исторической таблицы на основе меток, вы можете выполнить следующий оператор, чтобы добавить метки к исторической таблице:

ALTER TABLE example_table1
SET ("labels.location" = "rack:rack1,rack:rack2");

Использование меток для указания распределения данных материализованного представления на узлах BE

Если вам нужно указать места, куда будут распределены данные асинхронного материализованного представления, например, распределение данных по двум стойкам, rack1 и rack2, вы можете добавить метки к материализованному представлению.

После добавления меток все replica одного tablet в материализованном представлении распределяются по меткам по принципу Round-Robin. Более того, если несколько replica одного tablet существуют в рамках одной метки, эти replica будут распределены как можно более равномерно между разными BE в этой метке.

примечание
  • Если общее количество узлов BE, связанных с метками, меньше количества replica, система в первую очередь обеспечит достаточное количество replica. В этом случае replica могут быть распределены не так, как указано в метке.
  • Метки, которые нужно связать с материализованным представлением, должны уже существовать. В противном случае произойдёт ошибка Getting analyzing error. Detail message: Cannot find any backend with location: rack:xxx.

При создании материализованного представления

Если вы хотите распределить данные материализованного представления по rack 1 и rack 2 при его создании, вы можете выполнить следующий оператор:

CREATE MATERIALIZED VIEW mv_example_mv
DISTRIBUTED BY RANDOM
PROPERTIES (
"labels.location" = "rack:rack1,rack:rack2")
as
select order_id, dt from example_table;

Для вновь созданных материализованных представлений значение по умолчанию свойства labels.location равно *, что означает, что replica равномерно распределяются по всем меткам. Если распределение данных вновь созданного материализованного представления не должно учитывать географическое расположение серверов в cluster, вы можете вручную установить свойство "labels.location" = "".

После создания материализованного представления

Если вам нужно изменить место распределения данных материализованного представления после его создания, например, изменить место на rack 1, rack 2 и rack 3, вы можете выполнить следующий оператор:

ALTER MATERIALIZED VIEW mv_example_mv
SET ("labels.location" = "rack:rack1,rack:rack2,rack:rack3");
примечание

Если вы обновили Selena до версии 3.2.8 или более поздней, для существующих материализованных представлений, созданных до обновления, данные по умолчанию не распределяются на основе меток. Если вам нужно распределить данные существующего материализованного представления на основе меток, вы можете выполнить следующий оператор, чтобы добавить метки к материализованному представлению:

ALTER TABLE example_mv1
SET ("labels.location" = "rack:rack1,rack:rack2");