1

今週末、新しいプロジェクトで 1 日の無料割り当てを使い果たしました。参考までに、これは 50 万回の書き込みであり、計算が正しければ 50,000 回です。

以下は、私のプロジェクトでデータストアの書き込み操作を行っている唯一のコードです。

    old = Streams.query().fetch(keys_only=True)
    ndb.delete_multi(old)
    try:
        r = urlfetch.fetch(url=streams_url,
                           method=urlfetch.GET)
        streams = json.loads(r.content)
        for stream in streams['streams']:
            stream = Streams(channel_id=stream['_id'],
                             display_name=stream['channel']['display_name'],
                             name=stream['channel']['name'],
                             game=stream['channel']['game'],
                             status=stream['channel']['status'],
                             delay_timer=stream['channel']['delay'],
                             channel_url=stream['channel']['url'],
                             viewers=stream['viewers'],
                             logo=stream['channel']['logo'],
                             background=stream['channel']['background'],
                             video_banner=stream['channel']['video_banner'],
                             preview_medium=stream['preview']['medium'],
                             preview_large=stream['preview']['large'],
                             videos_url=stream['channel']['_links']['videos'],
                             chat_url=stream['channel']['_links']['chat'])
            stream.put()
        self.response.out.write("Done")
    except urlfetch.Error, e:
        self.response.out.write(e)

これは私が知っていることです:

  • 「ストリーム」に 25 を超える「ストリーム」が存在することはありません。.put() を正確に 25 回呼び出すことが保証されています。
  • 実行するたびにすべてを更新する必要があるため、この呼び出しの開始時にテーブルからすべてを削除します。
  • 現在、このコードは 60 秒ごとに実行される cron にあります。1 分間に 1 回以上実行されることはありません。
  • Appstats を有効にしてこれらすべてを確認したところ、意図したとおり、datastore_v3.Put カウントが 1 分ごとに 25 ずつ増加していることがわかります。

ここで何か間違ったことをしているに違いありません。1 分間に 25 回というのは、1 時間に 1,500 回の書き込みであり、現在見ている 50,000 回ではありません。

ありがとう

4

3 に答える 3

5

ここでは、API 呼び出しの書き込み (コードが呼び出すもの) と低レベルのデータストア書き込み操作の 2 つの異なるものを混在させています。関係については、課金ドキュメントを参照してください:データストア呼び出しのコストの価格設定(2 番目のセクション)。

これは関連する部分です:

New Entity Put (per entity, regardless of entity size) = 2 writes + 2 writes per indexed property value + 1 write per composite index value

あなたの場合Streams、15 のインデックス付きプロパティがあり、書き込み API 呼び出しごとに 2 + 15 * 2 = 32 書き込み OP になります。

1 時間あたりの合計: 60 (リクエスト/時間) * 25 (プット/リクエスト) * 32 (オペレーション/プット) = 1 時間あたり48,000データストア書き込みオペレーション

于 2013-07-01T10:28:23.510 に答える