我正在使用 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]
注意:我没有在我的 feature_post_import
函数中使用 entity_instance, bulkload_state
。我只是创建新的数据存储实体(基于我的 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
更新:
为了测试批量加载过程的性能,我加载了“测试”种类
的实体
。即使此 entity
有一个非常简单的 FloatProperty
,我仍然花费相同的时间来批量加载那些 entities
。
我仍然会尝试改变批量加载器参数,rps_limit
、bandwidth_limit
和 http_limit
,看看我是否可以得到任何更多吞吐量。
最佳答案
有一个名为 rps_limit
的参数决定了每秒上传的实体数量。这是主要的瓶颈。默认值为 20
。
同时将 bandwidth_limit
增加到合理的水平。
我将 rps_limit
增加到 500
,一切都得到了改善。我实现了每 1000 个实体 5.5 - 6 秒,这是每 1000 个实体 50 秒的重大改进。
关于python - App Engine 批量加载程序性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670941/