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