如何最好地减少数据存储区使用的CPU时间

时间:2011-05-17 09:38:42

标签: google-app-engine optimization datastore

我有一个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时间?

3 个答案:

答案 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)

您是否尝试过使用nice对其他人流程很好?

http://en.wikipedia.org/wiki/Nice_%28Unix%29

此外,请确保您正在进行批量插入,但似乎是这样。