Skip to main content
 首页 » 编程设计

python之为什么我的 Datastore Write Ops 如此之高

2025年05月04日10飞鱼

这个周末我用完了一个新项目的每日免费配额。作为引用,这是 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 上。它的运行频率绝不会超过每分钟一次。
  • 我已通过启用 Appstats 验证了所有这些,我可以看到 datastore_v3.Put 计数按预期每分钟增加 25。

我一定是这里做错了什么,因为一分钟 25 次是一小时写入 1,500 次,而不是我现在看到的大约 50,000 次。

谢谢

请您参考如下方法:

您在这里混合了两种不同的东西:编写 API 调用(您的代码调用的内容)和低级数据存储写入操作。关系见计费凭证:Pricing of Costs for Datastore Calls (第二部分)。

这是相关部分:

新实体 Put(每个实体,无论实体大小)= 2 次写入 + 每个索引属性值 2 次写入 + 每个复合索引值 1 次写入

在您的情况下,Streams 有 15 个索引属性,结果是:2 + 15 * 2 = 32 个写入 OP 每次写入 API 调用。

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