Задача: Мы запрашиваем нашу базу данных с большим количеством записей. Общая производительность приложений в порядке. Но я думаю, что было бы лучше, если бы наше узкое место, обращаясь к специальной таблице, могло быть сделано параллельно.Дизайн шаблонов Grails для параллельных запросов с использованием динамических искателей
Мы используем для этого динамических искателей как:
Object.findAllByObjectCollectionAndParentIsNullAndDeletedByUserIsNull(objectCollection, [sort: 'attr1.number', fetch: [objectType: 'eager']])
Я думаю, что об этом решении: Деление запроса в 2 этапа.
- Первый шаг загружает только идентификаторы отсортированным способом.
- Второй этап (может выполняться в параллельных потоках) загружает объекты по идентификатору и вставляет его в набор результатов.
Я уже искал некоторые намеки на это, но ничего не нашел.
- Возможно ли, что это не имеет никакого смысла?
- Или уже существует подходящее решение в стандарте/расширениях grails?
- Если это имеет смысл, и нет решения: может ли кто-нибудь дать мне подсказку, реализующую его? Но нам нужны идентификаторы в этом порядке, объясненные в примере.
Мы используем grails 2.3.11, hibernate: 3.6.10.13 с jdk 1.7 под ним.
Вы зарегистрировали SQL своего запроса findAll и попытались проанализировать, что он делает? есть ли индексы для родителя и удалены? в противном случае есть только один способ узнать о таких вещах: попробуйте и сравните его. когда дело доходит до производительности, часто нет серебряной пули для всех случаев. – cfrick
Да, конечно. Эти объекты, которые мы загружаем, содержат очень маленькие элементы данных, такие как ячейка листа excel. Поэтому, когда страница отображается, нам нужно много их. – Mirko