5

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 GB(〜1,000,000エンティティ)のデータには約20時間かかります。バルクロードプロセスのパフォーマンスを改善するにはどうすればよいですか。私は何かが足りないのですか?

appcfg.pyで使用するパラメーターのいくつかは(スレッドあたり10エンティティのバッチサイズの10スレッド)です。

リンクされたGoogleAppEngine Pythonグループの投稿: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

更新:一括読み込みプロセスのパフォーマンスをテストするためentitiesに、「テスト」を読み込みましたKind。これentityは非常に単純FloatPropertyですが、それらを一括ロードするのに同じ時間がかかりましたentities

バルクローダーのパラメーター、、、を変更して、rps_limitさらにbandwidth_limitスループットhttp_limitが得られるかどうかを確認します。

4

1 に答える 1

4

rps_limit1秒あたりにアップロードするエンティティの数を決定するというパラメータがあります。これが大きなボトルネックでした。これのデフォルト値はです20

また、bandwidth_limit合理的なものに増やします。

私はに増加rps_limit500、すべてが改善されました。1000エンティティあたり5.5〜6秒を達成しました。これは、1000エンティティあたり50秒から大幅に改善されています。

于 2010-09-15T19:17:38.473 に答える