Производительность App Engine Bulk Loader

Я использую загрузчик App Engine Bulk (Python Runtime) для массовой загрузки сущностей в хранилище данных. Данные, которые я загружаю, хранятся в собственном формате, поэтому я реализовал их через собственный соединитель (зарегистрировал его в 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) и возвращая их.

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

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

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

Обновление: чтобы проверить производительность процесса массовой загрузки, я загрузил entities "Тест" Kind, Хотя это entity имеет очень простой FloatPropertyЭто заняло у меня столько же времени entities,

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

1 ответ

Решение

Есть параметр называется rps_limit это определяет количество объектов для загрузки в секунду. Это было главным узким местом. Значение по умолчанию для этого 20,

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

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

Другие вопросы по тегам