Дополнительные узлы помогут, но улучшение трудно определить количественно.Он может быть большим, может быть небольшим.
Часть работы в примере кода включает применение предиката для 100 000 записей.Если индекса нет, этап сканирования проверяет 50 000 записей на узел, если имеется 2 узла.Удвойте до 4 узлов, каждый из которых имеет 25 000 записей для сканирования, и поэтому время сканирования будет вдвое меньше.
Время сканирования является частью времени запроса, общий набор результатов также должен быть сформирован из частичных результатов изкаждый узел.Таким образом, удвоение количества узлов может составить почти половину времени выполнения как лучший вариант, или это может не быть существенным улучшением.
Возможно, более важный вопрос здесь заключается в том, чего вы пытаетесь достичь?
objectMap.values(predicate)
в примере кода извлекает набор результатов в центральную точку, к которой затем применяется parallelStream()
, чтобы попытаться объединить результаты параллельно в MultiMap.Так что это выглядит скорее как ETL, чем как запрос.
Использование исполнителей в соответствии с заголовком, и что-то вроде objectMap.localKeySet(predicate)
может позволить лучше распараллелить это, поскольку не будет центральной точки, удерживающей промежуточныйрезультаты.