2010-09-08 46 views
5

我正在使用App Engine批量加載程序(Python運行時)將實體批量上傳到數據存儲。我上傳的數據是以專有格式存儲的,所以我通過自己的連接器(註冊在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 

要將此中性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個實體)。

鏈接的谷歌應用程序引擎的Python組後:http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

更新: 要測試大容量裝載過程中的表現,我裝entities「測試」 Kind的。即使這個entity有一個非常簡單的FloatProperty,它仍然花了我相同的時間來批量加載這些entities

我仍然會嘗試改變散裝裝載機參數rps_limit,bandwidth_limithttp_limit,以查看是否可以獲得更多吞吐量。

+0

如果有什麼關於這個問題,或東西,我需要添加,那麼請讓我知道迷惑。 – Rahul 2010-09-10 18:21:06

回答

4

有一個參數叫做rps_limit,它決定了每秒上傳的實體數量。這是主要的瓶頸。這個的默認值是20

也增加了bandwidth_limit的東西合理。

我增加rps_limit500,一切改善。我每1000個實體實現了5.5-6秒,這是從每1000個實體50秒的重大改進。

相關問題