Google App Engine, заполняющий записи в хранилище данных - PullRequest
1 голос
/ 31 января 2011

Я хочу заполнить свое хранилище данных некоторыми значениями. Каков наилучший способ сделать это? Это мой код -

for n in range(seqlen):
  for m in range(n+1):
    for l in range(m+1):
      temp = [-BIGINT for k in range(m-l+1)]
      obj = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l))
      obj.value = temp
      obj.put()

или этот лучше?

for n in range(seqlen):
  for m in range(n+1):
    for l in range(m+1):
      temp = [-BIGINT for k in range(m-l+1)]
      obj[i] = DbEntity4D(key_name=str(n)+','+str(m) +','+ str(l))
      obj[i].value = temp
      i = i+1

    db.put(obj)

Или есть другой способ получше?

seqlen может быть от 1 до 1000. Возможно, не удастся завершить весь этот процесс за 10 минут, но я могу продолжить с того места, где я ушел ранее, в своем следующем задании.

1 Ответ

2 голосов
/ 31 января 2011

Пакетные размещения хранилищ данных сэкономят значительное количество времени за счет исключения обращений к хранилищу данных.

Похоже, вы пытаетесь сделать это с вашим последним блоком кода (сохраняя m сущностей одновременно). В случае, когда seqlen равно 1000, вы будете записывать до 1000 объектов одновременно. Тем не менее, число сущностей, написанных за раз, варьируется, так как ваш внутренний цикл for зависит от того, сколько сущностей он создает. Возможно, будет еще быстрее, если вы дождетесь сохранения в базе данных, пока не соберете n (некоторое большое количество) DbEntity4D сущностей, а затем сохраните их (а не сохраняете их сразу после самого внутреннего цикла). Конечно, это может усложнить логику, которая позволяет следующей задаче возобновить добавление, создавая эти сущности там, где прервалась предыдущая задача.

...