У нас есть часть нашего приложения, которое должно загрузить большой набор данных ( > 2000 объектов) и выполнить вычисления на этом наборе. Размер каждого объекта составляет приблизительно 5 КБ.
В нашей начальной, наивной реализации узким местом, как представляется, является время, необходимое для загрузки всех объектов (~ 40 секунд для 2000 сущностей), а время, необходимое для выполнения самого вычисления, очень маленький (< 1 секунда).
Мы попробовали несколько стратегий для ускорения поиска объектов:
- Разделение запроса на поиск на несколько параллельных экземпляров и последующее объединение результата: ~ 20 секунд для 2000 объектов.
- Сохранение объектов в кеше в памяти, размещенном на резидентном бэкэнд: ~ 5 секунд для 2000 объектов.
Вычисление должно быть рассчитано динамически, поэтому выполнение предвычисления во время записи и сохранение результата в нашем случае не работают.
Мы надеемся, что сможем получить ~ 2000 сущностей всего за одну секунду. Является ли это возможностью GAE/J? Любые другие стратегии, которые мы могли бы реализовать для такого рода поиска?
ОБНОВЛЕНИЕ: предоставление дополнительной информации о нашем примере использования и результатах распараллеливания:
- У нас более 200 000 объектов одного типа в хранилище данных, и операция выполняется только для поиска.
- Мы экспериментировали с 10 параллельными рабочими экземплярами, и типичный результат, который мы получили, можно было увидеть в this pastebin. Кажется, что сериализация и десериализация, требуемые при передаче объектов обратно на главный экземпляр, препятствуют производительности.
ОБНОВЛЕНИЕ 2: Приведите пример того, что мы пытаемся сделать:
- Предположим, что у нас есть объект StockDerivative, который необходимо проанализировать, чтобы узнать, действительно ли это хорошая инвестиция или нет.
- Выполненный анализ требует сложных вычислений, основанных на многих факторах как внешнего (например, предпочтения пользователя, состояния рынка), так и внутреннего (т.е. от свойств объекта), и выводит одно значение "инвестиционной оценки".
- Пользователь может запросить деривацию для сортировки на основе ее инвестиционной оценки и попросить представить N-число наивысших деривативов.