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