Перейти к основному содержимому

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

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

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

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

Предположим, что один кластер 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, вы можете добавить метки к таблице.

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

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

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

Вы можете использовать свойство "labels.location" для распределения данных таблицы по стойке 1 и стойке 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 равно *, что указывает на равномерное распределение реплик по всем меткам. Если распределение данных вновь созданной таблицы не должно учитывать географические местоположения серверов в кластере, вы можете вручную установить свойство таблицы "labels.location" = "".

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

Если вам нужно изменить местоположение распределения данных таблицы после создания таблицы, например, изменить местоположение на стойку 1, стойку 2 и стойку 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, вы можете добавить метки к материализованному представлению.

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

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

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

Если вы хотите распределить данные материализованного представления по стойке 1 и стойке 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 равно *, что указывает на равномерное распределение реплик по всем меткам. Если распределение данных вновь созданного материализованного представления не должно учитывать географические местоположения серверов в кластере, вы можете вручную установить свойство "labels.location" = "".

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

Если вам нужно изменить местоположение распределения данных материализованного представления после его создания, например, изменить местоположение на стойку 1, стойку 2 и стойку 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");