App Engine批量装载机性能

时间:2010-09-08 18:47:27

标签: python performance google-app-engine bulk-load bulkloader

我正在使用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),然后返回它们。

现在,一切都很好。但是,批量加载数据的过程似乎需要花费太多时间。对于例如GB(~1,000,000个实体)的数据需要大约20个小时。如何提高批量加载过程的性能。我错过了什么吗?

我与appcfg.py一起使用的一些参数是(每个线程批量大小为10个实体的10个线程)。

关联Google App Engine Python小组帖子:http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

更新: 为了测试批量加载过程的性能,我加载了{Test} entities的{​​{1}}。尽管此Kind有一个非常简单的entity,但我仍需花费相同的时间来批量加载这些FloatProperty

我仍然会尝试更改批量加载程序参数entitiesrps_limitbandwidth_limit,以查看是否可以获得更多吞吐量。

1 个答案:

答案 0 :(得分:4)

有一个名为rps_limit的参数,用于确定每秒上传的实体数。这是主要的瓶颈。默认值为20

同时将bandwidth_limit增加到合理的范围。

我将rps_limit增加到500,一切都得到了改善。我实现了每1000个实体5.5到6秒,这是每1000个实体50秒的重大改进。