Как лучше всего сократить время процессора, используемое хранилищем данных - PullRequest
2 голосов
/ 17 мая 2011

У меня есть задание cron, которое я запускаю каждые три минуты, которое извлекает некоторые данные из удаленного API и затем сохраняет их в моем локальном хранилище данных.Однако, это занимает огромное количество процессорного времени в операции размещения хранилища данных.Я подозреваю, что я, вероятно, делаю что-то действительно глупое, которое можно оптимизировать очень много:

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?

Ответы [ 3 ]

6 голосов
/ 17 мая 2011

~ 2k cpu_ms выглядит примерно так. Вы видите 46k api cpu_ms, потому что хранилище данных может писать только макс. 10 сущностей в секунду (управляемые API), и вы пишете 450+ сущностей, таким образом, 450+/10 составляет около 46k cpu_ms.

Использование api не учитывается непосредственно в нижней строке вашей квоты, только real ~ 2k. Так что не волнуйся об этом, ты в порядке.

1 голос
/ 17 мая 2011

Путь в порядке. На самом деле единственный способ ошибиться - это использовать слишком много RPC. Вы уже используете только один.

Хранение ~ 400 сущностей в одном обработчике запросов будет дорогостоящим. Если вы хотите оптимизировать, я бы спросил себя, нужно ли вам хранить столько объектов одновременно. Не могли бы вы выполнять работу cron чаще и возвращать меньшие партии? Вы действительно нуждаетесь в одной сущности на строку, или вы могли бы сделать то же самое с меньшим количеством сущностей и ListProperty? На самом деле в вашем вопросе недостаточно контекста, чтобы предлагать действенные советы, но это нужно учитывать.

0 голосов
/ 17 мая 2011

Вы пытались использовать nice, чтобы быть приятным для других?

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

Также убедитесь, что вы делаете массовую вставку, но это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...