2

我有一个每三分钟运行一次的 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 时间吗?

4

3 回答 3

6

~2k cpu_ms 看起来差不多。您看到api的是 46k cpu_ms,因为数据存储只能写入最大值。每秒 10 个实体(由 api 管理),您正在编写 450 多个实体,因此450+/10大约是 46k cpu_ms。

使用api量不直接计入您的配额底线,只有real~2k 会。所以别担心,你很好。

于 2011-05-17T13:16:53.290 回答
1

看跌是好的。实际上,您可能会出错的唯一方法是使用过多的 RPC。您已经只使用了一个。

在一个请求处理程序中存储约 400 个实体会很昂贵。如果您正在寻求优化,我会问自己是否真的需要一次存储这么多实体。您能否更频繁地运行 cron 作业并返回较小的批次?您实际上是否需要每行一个实体,或者您可以用更少的实体和一个 ListProperty 来完成同样的事情吗?您的问题中没有足够的上下文来提供可操作的建议,但这是需要考虑的事情。

于 2011-05-17T14:41:47.493 回答
-7

您是否尝试过nice对他人友善的过程?

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

另外,请确保您正在进行批量插入,但看起来确实如此。

于 2011-05-17T09:43:17.073 回答