Использование очередей задач в GAE для вставки массовых данных - PullRequest
0 голосов
/ 02 ноября 2010

Я использую Google App Engine для создания веб-приложения. В приложении есть сущность, записи которой будут вставлены пользователем через средство загрузки. Пользователь может выбрать до 5K строк (объектов) данных. Я использую проект DataNucleus в качестве реализации JDO. Вот подход, который я использую для вставки данных в хранилище данных.

  1. Данные считываются из CSV и преобразуются в объекты сущностей и сохраняются в списке.
  2. Список разделен на более мелкие группы объектов, скажем, около 300 / группа.
  3. Каждая группа сериализуется и сохраняется в кеше с использованием memcache с использованием уникального идентификатора в качестве ключа.
  4. Для каждой группы задача создается и вставляется в очередь вместе с ключом. Каждая задача вызывает сервлет, который принимает этот ключ в качестве входного параметра, считывает данные из памяти, вставляет их в хранилище данных и удаляет данные из памяти.

Максимальная скорость очереди составляет 2 / мин, а размер корзины равен 1. Проблема, с которой я сталкиваюсь, заключается в том, что задача не может вставить все 300 записей в хранилище данных. Из 300 максимальное вставляемое значение составляет около 50. Я проверил данные, как только они будут считаны из memcache, и я смог вернуть все сохраненные данные из памяти. Я использую метод makepersistent PersistenceManager для сохранения данных в DS. Может кто-нибудь сказать, пожалуйста, в чем может быть проблема?

Кроме того, я хочу знать, есть ли лучший способ обработки массовой вставки / обновления записей. Я использовал инструмент BulkInsert. Но в подобных случаях он не будет удовлетворять требованию.

1 Ответ

1 голос
/ 02 ноября 2010

Это идеальный вариант использования для App Engine mapreduce . Mapreduce может читать строки текста из большого двоичного объекта в качестве входных данных, и он будет осматривать ваш ввод для вас и выполнять его в очереди задач.

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

...