2011-01-31 8 views
1

Je souhaite remplir mon magasin de données avec certaines valeurs. Quelle est la meilleure façon de procéder ? Ceci est mon code -Google App Engine remplissant des entrées de magasin de données

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() 

ou est-ce un mieux?

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) 

Ou existe-t-il un autre moyen? Seqlen peut être compris entre 1 et 1000. Il peut ne pas être en mesure de terminer tout ce processus en 10 minutes, mais je peux continuer d'où je suis parti précédemment lors de ma prochaine tâche.

Répondre

2

La mise en lots de stock de données en temps réel économisera beaucoup de temps en éliminant les allers-retours vers le magasin de données.

Il semblerait que vous essayiez de le faire avec votre dernier bloc de code (en sauvegardant m entités à la fois). Dans le cas où seqlen est 1000, vous allez écrire jusqu'à 1000 entités à la fois. Cependant, le nombre d'entités écrites à la fois varie puisque votre boucle la plus interne varie en nombre d'entités. Il peut être encore plus rapide si vous attendez d'enregistrer dans la base de données jusqu'à ce que vous ayez collecté n (un grand nombre) d'entités DbEntity4D, puis enregistrez-les (plutôt que de toujours les enregistrer immédiatement après votre boucle la plus interne). Bien sûr, cela peut compliquer la logique qui permet à la tâche suivante de reprendre l'ajout en créant ces entités où une tâche précédente s'est arrêtée.

+3

convenu. Je suggère également d'utiliser remote_api au lieu d'essayer de le faire dans une seule requête ou tâche, car un script remote_api exécuté en dehors du moteur de l'application peut fonctionner aussi longtemps que vous le souhaitez. – ryan

Questions connexes