Как получить огромное (> 2000) количество объектов из хранилища данных GAE менее чем за 1 секунду?

У нас есть часть нашего приложения, которой необходимо загрузить большой набор данных (> 2000 сущностей) и выполнить вычисления на этом наборе. Размер каждого объекта составляет примерно 5 КБ.

В нашей начальной, наивной реализации, узким местом кажется время, необходимое для загрузки всех сущностей ( ~ 40 секунд для 2000 сущностей ), в то время как время, необходимое для выполнения самого вычисления, очень велико. маленький (

Мы испробовали несколько стратегий для ускорения извлечения сущностей:

  • Разделение запроса извлечения на несколько параллельных экземпляров и последующее объединение результата: ~ 20 секунд для 2000 сущностей .
  • Сохранение объектов в кэше в памяти, размещенном на резидентном сервере: ~ 5 секунд для 2000 объектов .

Вычисление должно производиться динамически, поэтому предварительное вычисление во время записи и сохранение результата в нашем случае не работают.

Мы надеемся получить ~ 2000 объектов менее чем за секунду. Это в пределах возможностей GAE / J? Какие-либо другие стратегии, которые мы могли бы реализовать для такого рода извлечения?

ОБНОВЛЕНИЕ: Предоставление дополнительной информации о нашем варианте использования и результате распараллеливания:

  • У нас их более 200.000 однотипных объектов в хранилище данных, и операция предназначена только для извлечения.
  • Мы экспериментировали с 10 параллельными рабочими экземплярами, и типичный результат, который мы получили, можно увидеть в этом pastebin . Похоже, что сериализация и десериализация, необходимые при передаче сущностей обратно в главный экземпляр, снижают производительность.

ОБНОВЛЕНИЕ 2: Приведем пример того, что мы пытаемся сделать:

  1. Допустим, у нас есть объект StockDerivative, который необходимо проанализировать, чтобы определить, является ли это хорошим вложением.
  2. Выполненный анализ требует сложных вычислений, основанных на многих факторах, как внешних (например, предпочтения пользователя, состояние рынка), так и внутренних (то есть от свойств объекта), и даст единственное значение «инвестиционной оценки».
  3. Пользователь может запросить сортировку деривативов на основе его инвестиционной оценки и запросить представление N-числа деривативов с наивысшей оценкой.

11
задан Michael Manoochehri 15 May 2012 в 19:46
поделиться