5

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

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 

Чтобы преобразовать этот нейтральный словарь питона в сущности хранилища данных, я использую функцию импорта пользовательских пост, который я определил в моем 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) и возвращаю их.

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

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

Linked группу пост Google App Engine Python: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

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

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

+0

Если есть что-то непонятное в вопросе или что-то, что мне нужно добавить, тогда дайте мне знать. – Rahul

ответ

4

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

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

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