Я использую массовый загрузчик 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.
Чтобы проверить производительность процесса массовой загрузки, я загрузил сущностей
типа «Test» Kind
. Несмотря на то, что этот объект
имеет очень простое FloatProperty
, мне все равно потребовалось столько же времени для массовой загрузки этих объектов
.
Я все еще собираюсь изменить параметры массового загрузчика, rps_limit
, bandwidth_limit
и http_limit
, чтобы посмотреть, смогу ли я увеличить пропускную способность.