1

这个周末,我在一个新项目上的每日免费配额用完了。作为参考,这是 0.05 万次写入,如果我的数学是正确的,则为 50,000 次。

以下是我的项目中进行任何 Datastore 写入操作的唯一代码。

    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 上。它的运行频率永远不会超过每分钟一次。
  • 我通过启用 Appstats 验证了所有这些,我可以看到 datastore_v3.Put 计数按预期每分钟增加 25 个。

我必须在这里做错事,因为每分钟 25 次是每小时 1,500 次写入,而不是我现在看到的 ~50,000 次。

谢谢

4

3 回答 3

5

好像我终于弄清楚发生了什么,所以我想在这里更新。我找到了这个较旧的答案:https ://stackoverflow.com/a/17079348/1452497 。

我错过了某处被索引的属性以某种方式将写入乘以至少 10 的因子,我没想到会这样。我不需要对所有内容进行索引,并且在我的模型中关闭索引后,我注意到写入操作急剧下降。下降到我期望的地方。

多谢你们!

于 2013-06-30T23:09:02.620 回答
5

您在这里混合了两种不同的东西:编写 API 调用(您的代码调用的内容)和低级数据存储写入操作。请参阅关系的计费文档:数据存储调用的成本定价(第二部分)。

这是相关部分:

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 个索引属性导致:2 + 15 * 2 = 32 个写入 OP 每次写入 API 调用。

每小时总计:60(请求/小时)* 25(放置/请求)* 32(操作/放置)= 48,000数据存储写入操作/小时

于 2013-07-01T10:28:23.510 回答
1

它是 1500*24=36,000 次写入/天,非常接近每日配额。

于 2013-06-30T21:55:18.450 回答