本周末,我在一个新项目上破坏了我的每日免费配额。作为参考,这是0.05万次写入,如果我的数学是正确的,则为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分钟是1小时写入,而不是我现在看到的大约50,000分钟。
由于
答案 0 :(得分:5)
好像我终于知道发生了什么,所以我想在这里更新。 我找到了这个较旧的答案:https://stackoverflow.com/a/17079348/1452497。
我错过了某个地方的某个地方,被索引的属性以某种方式将写入乘以至少10的因子,我没想到。我不需要索引所有内容,在关闭模型中的索引之后,我注意到写操作会掉落DRAMATICALLY。到了我期望的地方。
谢谢你们!
答案 1 :(得分:5)
这里混合了两个不同的东西:编写API调用(代码调用的代码)和低级数据存储区写操作。请参阅关系的开票凭证:Pricing of Costs for Datastore Calls(第二部分)。
这是相关部分:
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 =每次写API调用写入OP。
每小时总计:60(请求/小时)* 25(置位/请求)* 32(操作/放置)= 48,000 每小时数据存储写入操作
答案 2 :(得分:1)
每天1500 * 24 = 36,000次写入,这非常接近每日配额。