Я использую Google App Engine для создания веб-приложения. Приложение имеет сущность, записи, для которых будет вставлен пользователь через функцию загрузки. Пользователь может выбрать до 5 тыс. Строк (объектов) данных. Я использую проект DataNucleus в качестве реализации JDO. Вот такой подход, который я беру для вставки данных в хранилище данных.Использование очередей задач в GAE для вставки объемных данных
- Данные считываются из CSV и преобразуются в объекты сущностей и сохраняются в списке.
- Список разделен на более мелкие группы объектов, которые говорят около 300/группы.
- Каждая группа сериализуется и хранится в кеше с использованием memcache с использованием уникального идентификатора в качестве ключа.
- Для каждой группы задание создается и вставляется в очередь вместе с ключом. Каждая задача вызывает сервлет, который принимает этот ключ в качестве входного параметра, считывает данные из памяти и вставляет его в хранилище данных и удаляет данные из памяти.
Очередь имеет максимальную скорость 2/мин, а размер ведра равен 1. Проблема, с которой я столкнулся, - это задача не вставлять все 300 записей в хранилище данных. Из 300 максимум, который вставил, составляет около 50. Я проверял данные после его чтения из memcache и могу получить все сохраненные данные из памяти. Я использую метод makepersistent для PersistenceManager для сохранения данных в ds. Может кто-нибудь, пожалуйста, скажите мне, в чем проблема?
Кроме того, я хочу знать, есть ли лучший способ обработки массовой вставки/обновления записей. Я использовал инструмент BulkInsert. Но в таких случаях он не будет удовлетворять требованиям.
Именно поэтому я хочу, чтобы пользователи, не являющиеся администраторами, загружали данные. Пользователь может выбирать свои ежедневные записанные данные и загружать их в DS через средство загрузки. – Vikram