Производительность массового загрузчика App Engine

Я использую массовый загрузчик App Engine (среда выполнения Python) для массовой загрузки объектов в хранилище данных. Данные, которые я загружаю, хранятся в проприетарном формате, поэтому я реализовал собственный коннектор (зарегистрировал его в bulkload_config.py), чтобы преобразовать его в промежуточный словарь Python.

import google.appengine.ext.bulkload import connector_interface
class MyCustomConnector(connector_interface.ConnectorInterface):
   ....
   #Overridden method
   def generate_import_record(self, filename, bulkload_state=None):
      ....
      yeild my_custom_dict

Чтобы преобразовать этот нейтральный словарь Python в объект хранилища данных, я использую пользовательскую функцию пост-импорта, которую я определил в своем YAML.

def feature_post_import(input_dict, entity_instance, bulkload_state):
    ....
    return [all_entities_to_put]

Примечание. Я не использую entity_instance, bulkload_state в своей функции feature_post_import. Я просто создаю новые сущности хранилища данных (на основе моего input_dict) и возвращаю их.

Теперь все отлично работает. Однако процесс массовой загрузки данных занимает слишком много времени. Например, 1 ГБ (~ 1 000 000 объектов) данных занимает ~ 20 часов. Как я могу улучшить производительность процесса массовой загрузки. Я что-то упускаю?

Некоторые из параметров, которые я использую с appcfg.py: (10 потоков с размером пакета из 10 объектов на поток).

Связано сообщение группы Python в Google App Engine: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840.

Обновление: чтобы проверить производительность процесса массовой загрузки, я загрузил entities из «Test» Kind. Несмотря на то, что этот entity имеет очень простой FloatProperty, мне все равно потребовалось столько же времени для массовой загрузки этих entities.

Я все еще собираюсь попробовать изменить параметры массового загрузчика, rps_limit, bandwidth_limit и http_limit, чтобы посмотреть, смогу ли я увеличить пропускную способность.


person Rahul    schedule 08.09.2010    source источник


Ответы (1)


Существует параметр rps_limit, который определяет количество объектов, загружаемых в секунду. Это было основным узким местом. Значение по умолчанию для этого - 20.

Также увеличьте bandwidth_limit до чего-нибудь разумного.

Я увеличил rps_limit до 500, и все стало лучше. Я достиг 5,5-6 секунд на 1000 сущностей, что является значительным улучшением по сравнению с 50 секундами на 1000 сущностей.

person Rahul    schedule 15.09.2010