7

重複の可能性:
アプリ エンジンのバルク ローダー ダウンロードの警告「キーに降順のインデックスがありません。シリアル ダウンロードを実行しています」

私の投稿は非常に似ています: App Engine バルク ローダー ダウンロードの警告「__key__ に降順インデックスがありません。シリアル ダウンロードを実行しています」

私は本質的に同じことをしたいです。

基本的に、私は以下を使用して、私の種類の 1 つのすべてのインスタンスをダウンロードしています。

appcfg.py download_data --config_file=bulkloader.yaml --kind=ModelName --filename=ModelName.csv --application=MyAppid --url=http://MyAppid.appspot.com/remote_api

種類にバッチサイズよりも多くのインスタンスがある場合、次の警告が表示されます。

No descending index on __key__, performing serial download

これにより、約 6500 エンティティのダウンロードに 471.4 秒かかります (完了後のバルクローダー ツールによると)。これよりもさらに大きな種類が他に約 4 つあります (約 15,000 エンティティ)。

また、Mac のアクティビティ モニターによると、バルクローダー出力の帯域幅が示すように、約 24Kb/秒でしかダウンロードしていません。

[INFO    ] Logging to bulkloader-log-20110514.011333
[INFO    ] Throttling transfers:
[INFO    ] Bandwidth: 250000 bytes/second
[INFO    ] HTTP connections: 8/second
[INFO    ] Entities inserted/fetched/modified: 20/second
[INFO    ] Batch Size: 10

私の質問は次のとおりです。

1) 並列ダウンロード速度を得るために、この警告「__key__ に降順インデックスがありません。シリアル ダウンロードを実行しています」を取り除くにはどうすればよいですか?

私の質問に対する答えは、降順のインデックスを追加することだと思います。何かのようなもの:

<datastore-index kind="Game" ancestor="false" source="manual">
    <property name="id" direction="desc"/>
</datastore-index>

これを datastore-indexes.xml ファイルに追加してみました。

正常にデプロイされましたが、Google の管理ポータルでデータストア インデックスを確認しましたが、サービスが提供されていたり、構築されていたりすることはありませんでした。とにかく、それのために、以下のコマンドを再実行しましたが、それでも遅かったです....

また、同じ xml を source="auto" で datastore-indexes-auto.xml ファイルに追加しようとしました。ただし、Eclipse をデプロイしようとすると、次のエラーが表示されました。

java.io.IOException: Error posting to URL: https://appengine.google.com/api/datastore/index/add?app_id=<My_APP_ID>&version=1&
400 Bad Request
Creating a composite index failed: This index:
entity_type: "Game"
ancestor: false
Property {
 name: "id"
 direction: 2
}

is not necessary, since single-property indices are built in. Please remove it from your index file and upgrade to the latest version of the SDK, if you haven't already.

2) この警告を削除するには、自動生成された bulkloader.yaml を更新する必要がありますか? 以下にゲームの種類を含めました。

python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users

transformers:

- kind: Game
  connector: csv
  connector_options:
    # TODO: Add connector options here--these are specific to each connector.
  property_map:
    - property: id
      external_name: key
      export_transform: transform.key_id_or_name_as_string

    - property: __scatter__
      #external_name: __scatter__
      # Type: ShortBlob Stats: 56 properties of this type in this kind.

    - property: genre
      external_name: genre
      # Type: String Stats: 6639 properties of this type in this kind.

    - property: name
      external_name: name
      # Type: String Stats: 6639 properties of this type in this kind.

    - property: releasedate
      external_name: releasedate
      # Type: Date/Time Stats: 6548 properties of this type in this kind.
      import_transform: transform.import_date_time('%Y-%m-%dT%H:%M:%S')
      export_transform: transform.export_date_time('%Y-%m-%dT%H:%M:%S')

便利な検索

この質問を入力していたとき。このApp Engine Bulk Loader Performanceを見つけました

基本的には、bandwidth_limitを妥当なものに増やし、rps_limitを増やすと実際に速度が向上することを説明しています。

だから私は試しました:

appcfg.py download_data --config_file=bulkloader.yaml --kind=ModelName --filename=ModelName.csv --application=MyAppId --url=http://MyAppId.appspot.com/remote_api --rps_limit=500 --bandwidth_limit=2500000 --batch_size=100

これにより、ダウンロード時間が 109.8 秒に短縮されました。大幅値下げです!

ただし、私の目標は、並列ダウンロードの「__キー__で降順のインデックスがありません。シリアルダウンロードを実行しています」を取り除くことにまだ焦点を当てています。


関連する可能性がある場合の追加情報

objectify3.0.jar を使用して GAE データストアを操作しています。したがって、私のゲームの種類は次のようになります。

public class Game {
    @Id private Long id; //This is my key, auto generated by objectify  
    private String name;
    private String genre; 
    private Date releasedate;

    //ommitting getters and setters 
}
4

0 に答える 0