Длительная (и сбой) массовая загрузка данных в хранилище данных Google App Engine

#python #google-app-engine #bulkloader

#python #google-app-engine #bulkloader

Вопрос:

Я разрабатываю приложение в Google App Engine, используя текущий django non-rel и хранилище данных с высокой репликацией по умолчанию. В настоящее время я пытаюсь локально загрузить файл csv размером 180 МБ на экземпляр разработчика с помощью следующей команды:

 appcfg.py upload_data --config_file=bulkloader.yaml --filename=../my_data.csv --kind=Place --num_threads=4 --url=http://localhost:8000/_ah/remote_api --rps_limit=500
  

bulkloader.yaml

 python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users

transformers:

- kind: Place
  connector: csv 
  connector_options:
      encoding: utf-8
      columns: from_header

  property_map:
    - property: __key__
      external_name: appengine_key
      export_transform: transform.key_id_or_name_as_string

- property: name
  external_name: name
  

Массовая загрузка фактически успешна для усеченной версии CSV на 1000 записей, но полный набор в конечном итоге зависает и начинает давать ошибки, «отступая» и ожидая все дольше и дольше. Журнал bulkloader, который я на самом деле отслеживаю, не показывает ничего полезного и либо выполняет stderr сервера.

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

Ответ №1:

180 МБ — это слишком много данных для загрузки в dev_appserver — он не предназначен для больших (или даже средних) наборов данных; он полностью создан для мелкомасштабного локального тестирования. Лучше всего было бы уменьшить размер вашего тестового набора данных; если вы не можете этого сделать, попробуйте флаг --use_sqlite командной строки, чтобы использовать новое локальное хранилище данных на основе sqlite, которое более масштабируемо.

Комментарии:

1. будьте готовы, он более масштабируемый, но с более чем несколькими открытыми проблемами

2. Спасибо. я только вчера понял это, прочитав, что локальное хранилище данных по умолчанию представляет собой простую карту памяти.