python - App Engine 批量加载程序性能

标签 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]

注意:我没有在我的 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_limitbandwidth_limithttp_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/

相关文章:

python - 制作 mydict ["foo/bar"] 查找 mydict ["foo"] ["bar"]

mysql - mysql针对嵌套查询的查询优化

python - 为什么我的(新手)代码这么慢?

mongodb插入真的很慢

Python多线程使用有限线程的for循环

python - 如何向 Windows 通知气球添加换行符?

node.js - 在 gcloud 上调试 Node 应用程序以修复 500 服务器错误

google-app-engine - App Engine 数据存储区查询是否有默认排序顺序?

python - linux环境下python修改excel文件

java - 糟糕的 Google Cloud SQL 性能