У меня есть N клиентских машин. Я хочу загрузить каждую машину с отдельным разделом индекса BRIN.
Для этого требуется:
- создать BRIN с предопределенным количеством разделов - равным количеству клиентских машин
- отправлять запросы от клиентов, которые используют WHERE на идентификаторе разделов BRIN вместо фильтра на индексированном столбце
Основная цель - повышение производительности при загрузке отдельной таблицы из postgres в распределенные клиентские машины, сохранение равного количества строк между клиентами - или близкое к равному, если количество строк не делит на количество компьютеров.
В настоящее время я могу добиться этого, сохранив новый столбец, который разбивает мою таблицу на количество ковшей, равную количеству клиентских машин (или используйте row_number() over (order by datetime) % N
на лету). Таким образом, это не будет эффективно при синхронизации и памяти, а индекс BRIN выглядит как приятная функция, которая может ускорить такие варианты использования.
Минимальный воспроизводимый пример для 3 клиентских машин:
CREATE TABLE bigtable (datetime TIMESTAMPTZ, value TEXT);
INSERT INTO bigtable VALUES ('2015-12-01 00:00:00+00'::TIMESTAMPTZ, 'txt1');
INSERT INTO bigtable VALUES ('2015-12-01 05:00:00+00'::TIMESTAMPTZ, 'txt2');
INSERT INTO bigtable VALUES ('2015-12-02 02:00:00+00'::TIMESTAMPTZ, 'txt3');
INSERT INTO bigtable VALUES ('2015-12-02 03:00:00+00'::TIMESTAMPTZ, 'txt4');
INSERT INTO bigtable VALUES ('2015-12-02 05:00:00+00'::TIMESTAMPTZ, 'txt5');
INSERT INTO bigtable VALUES ('2015-12-02 16:00:00+00'::TIMESTAMPTZ, 'txt6');
INSERT INTO bigtable VALUES ('2015-12-02 23:00:00+00'::TIMESTAMPTZ, 'txt7');
Ожидаемый результат:
- клиент 1
2015-12-01 00:00:00+00, 'txt1'
2015-12-01 05:00:00+00, 'txt2'
2015-12-02 02:00:00+00, 'txt3'
- клиент 2
2015-12-02 03:00:00+00, 'txt4'
2015-12-02 05:00:00+00, 'txt5'
- клиент 3
2015-12-02 16:00:00+00, 'txt6'
2015-12-02 23:00:00+00, 'txt7'
Вопрос:
Как я могу создать BRIN с предопределенным количеством разделов и запускать запросы, которые фильтруют идентификаторы разделов вместо фильтрации в столбце индекса?
Необязательно любым другим способом, с помощью которого BRIN (или другие плюсы pg) может ускорить задачу параллельной загрузки нескольких клиентов из отдельной таблицы?