Детали задачи
-
Ошибка
-
Решение: Готово
-
Medium
-
Community Core 3.45.4
-
Не заполнено
-
Critical/Crash
Описание
Необходимо оптимизировать скрипт /citeck/assocs из ecos-base-core-repo. Сейчас в БД уходят несколько тяжеловесных запросов. Пример одного из таких:
ect assoc.id as id, sourceNode.id as sourceNodeId, sourceStore.protocol as sourceNodeProtocol, sourceStore.identifier as sourceNodeIdentifier, sourceNode.uuid as sourceNodeUuid, targetNode.id as targetNodeId, targetStore.protocol as targetNodeProtocol, targetStore.identifier as targetNodeIdentifier, targetNode.uuid as targetNodeUuid, assoc.type_qname_id as type_qname_id, assoc.assoc_index as assoc_index from alf_node_assoc assoc join alf_node sourceNode on (sourceNode.id = assoc.source_node_id) join alf_store sourceStore on (sourceStore.id = sourceNode.store_id) join alf_node targetNode on (targetNode.id = assoc.target_node_id) join alf_store targetStore on (targetStore.id = targetNode.store_id)where targetNode.id = ?
Если у ноды много ассоциаций, то один или несколько подобных запросов убивают работоспособность стенда.
- Открыть проект ecos-community-core
- Открыть ecos-base-core-repo/src/main/resources/alfresco/templates/webscripts/ru/citeck/assocs/assocs.get.js
- Конструкции вида node.assocs['some_assoc'], node.childAssocs['some_child_assoc'], node.sourceAssocs['some_source_assoc'] возвращают сначала все ассоциации, фильтрация по нужному типу происходит уже внутри скрипта, данную фильтрацию необходимо выполнять на уровне запросов самой БД
- Ограничение кол-ва возвращаемых ассоциаций происходит внутри скрипта (ASSOCS_LIMIT), необходимо это ограничение перенести на уровень запросов самой БД
- Если возможно, то возвращать ассоциации, дочерние ассоциации и ассоциации источников одним запросом
Как вариант: взять EcosNodeService, расширить функционал + создать EcosNodeServiceJs для работы в JavaScript.