我有一个cron作业,我每三分钟运行一次,从远程API中提取一些数据,然后将其存储在我的本地数据存储区中。但是,这会在数据存储区放置操作中占用大量CPU时间。我怀疑我可能正在做一些非常愚蠢的事情,可以进行很多优化:
result = urllib2.urlopen(url).read()
foos = json.loads(result)['foo']
bars = json.loads(result)['bar']
models = []
for foo in foos:
d = FooContainer()
d.Property = foo.Value #in real code, this is setting a load of values based off foo
models.append(d)
for bar in bars:
d = BarContainer()
d.Property = bar.Value #in real code, this is setting a load of properties based off bar
models.append(d)
db.put(models)
如您所见,我将每个数据存储在本地数据存储表中作为新的“行”存储。是否有一些技术可用于减少此cron作业使用的巨大数据存储CPU时间?
答案 0 :(得分:6)
~2k cpu_ms看起来是正确的。您将看到46k api
cpu_ms,因为数据存储区只能写入最大值。每秒10个实体(由api管理),并且您正在编写450多个实体,因此450+/10
大约是46k cpu_ms。
api
用法不会直接计入您的配额底线,只会real
~2k。所以不要担心,你没事。
答案 1 :(得分:1)
看跌期权很好。真正唯一可以解决问题的方法就是使用太多的RPC。你已经只使用了一个。
在一个请求处理程序中存储约400个实体将会很昂贵。如果您正在寻求优化,我会问自己是否真的需要同时存储那么多实体。你可以更频繁地运行cron作业并返回较小的批次吗?你真的需要每行一个实体,或者你能用更少的实体和ListProperty完成同样的事情吗?你的问题中没有足够的背景来提供可操作的建议,但这是需要考虑的事情。
答案 2 :(得分:-7)