(Прежде всего, извините за мой английский. Я не являюсь носителем языка)
У меня проблема с выбором данных.
Моя проблема в том, что я неНе знаю, как оптимизировать SELECT из таблицы «компонент».Как я понимаю, я не могу создать индексы, которые помогут Postgres сделать выбор на основе набора правил из другой таблицы.
У меня есть следующая схема: Компонент может иметь несколько параметров и одного владельца.Параметры и владельцы могут быть добавлены в любые группы.Есть несколько конвейеров, где эти компоненты должны появиться.Существуют специальные правила фильтрации, основанные на группах и владельцах компонентов.Это правило может разрешить компонент или заблокировать его.Правила могут быть любым числом, и для них может быть применена дополнительная логика.
Таблица «компонент» может содержать большой объем данных.Каждый конвейер должен обрабатывать компоненты по частям (или по страницам).
Знайте, что я делаю так: 1.Введите идентификатор конвейера и выберите все его правила во временной таблице.2. Пройдите через все компоненты и вызовите мою функцию для каждого, который принимает component_id и owner_id, и используйте временную таблицу из шага 1 для проверки правил.
выглядит так:
SELECT *
FROM component
WHERE check_rules(component_id, owner_id)
LIMIT p_limit OFFSET p_offset
Но в этомcase Postgres каждый раз должен просматривать все записи в таблице, что снижает производительность.Эта структура должна работать в среде высокой нагрузки с большим объемом данных.Поэтому мне нужен способ оптимизировать эту ситуацию или иметь возможность ее масштабировать.Вероятно, использование Postgres в этом случае не является хорошим решением, и мне нужно использовать какую-то другую систему (например, MapReduce или BigTable, но я не работаю с ними).
Порекомендуйте что-нибудь, пожалуйста.Большое спасибо.
Вот некоторый SQL-код, если мне сказали, что он неясен.
CREATE TABLE component(
component_id int,
component_name varchar,
owner_id int);
CREATE TABLE parameter(
parameter_id int,
name varchar);
–component can have several parameters
CREATE TABLE component_parameter(
component_id int,
parameter_id int);
--tables for grouping parameters and owners
CREATE TABLE parameter_group(
group_id int,
parameter_id int);
CREATE TABLE owner_group(
group_id int,
owner_id int)
CREATE TABLE conveyor(
conveyor_id int,
conveyor_name varchar)
CREATE TABLE conveyor_rule(
conveyor_id int,
rule_id int,
allow_work boolean)
CREATE TABLE conveyor_rule_item(
rule_id int,
parameter_group_id int,
owner_group_id int)