Добрый день, имеется база инженерных данных в MS SQL , реализуемая в виде EAV/CR с 3k классов, 8к атрибутов, 200 типов связей, 50m сущностей и тд и тп...
с увеличением объёмов, возрастает нагрузка многократно из-за десятков join'ов и тд и тп...
Есть идея реализовать кэш запроса в виде запросов к read-only SQLite'а (+ аггрегированный хэш сущностей, которые получаем из INNER SELECT, чтобы отследить необходимость обновления этого read-only SQLite'а)
пример :
pseudo-sql:
select att1, att2, att3
from
equipment e
join security s on s.role = 'current_user_role' and s.acl = e.acl
where e.id in (
select t_e.id
from
equipment t_e
join relationships r on r.type = 'eq_vendor' and r.left = t_e.id
join vendors v on v.name = 'Рога и Копыта' and r.right = v.id
)
1. убираем фильтрацию по security:
2. делаем общий хэш найденных сущностей
и запихиваем результат во flat sqlite
3. перенаправляем запросы этому sqlite'у
4. "регулярно" пересчитываем хэш найденных сущностей и сравниваем с хэшем сохраннённой sqlite
Вопросы:
Впринципе, имеет ли смысл такой подход? или прирост производительности будет незначительным по сравнению со сложностью "управления"/реализации?