2010-11-10 23 views
5

docs AppEngine menzionano un limite 1Mb su entrambe le dimensioni dell'impresa e dei lotti ottenere richieste (db.get()): http://code.google.com/appengine/docs/python/datastore/overview.htmlLimite della dimensione della risposta della query su appengine?

C'è anche un limite alla dimensione totale di tutte le entità restituiti da una query per recuperare un singolo() chiama? interrogazione

Esempio:

db.Model.all().fetch(1000) 

Aggiornamento: Come di 1.4.0 lotto ottenere limiti sono stati rimossi!

  • dimensione e la quantità limiti datastore lotto ottengono/put/eliminare le operazioni sono stati rimossi. Le singole entità sono ancora limitate a 1 MB, ma l'app può raggruppare contemporaneamente più entità per le chiamate get/put/delete in base alla scadenza complessiva del datastore .

risposta

6

Theres no longer a limit dal numero di entità che possono essere restituiti da una query, ma lo stesso limite di dimensione entità applica quando in realtà si sta recuperando/scorrere l'entità. Tuttavia, ciò avverrà solo su una singola entità alla volta; non è un limite alle dimensioni totali di tutte le entità restituite dalla query.

Bottom line: finché non si dispone di una singola entità che è> 1 Mb, si dovrebbe essere a posto con le query.

+0

Grazie Karl. Ti capiterà di conoscere il limite di dimensioni sulla dimensione totale delle entità per una query (ad esempio per un singolo recupero())? – csytan

+1

Non penso che ce ne sia uno; Penso che l'unico limite sia il timeout dell'intera richiesta che potresti incontrare se avessi provato a ripetere i risultati di una query che aveva un milione di risultati. –

2

Sì, esiste un limite per le dimensioni; la sezione quotas and limits afferma esplicitamente che esiste un limite di 1 megabyte alle chiamate API db.

Non sarà possibile db.get (list_of_keys) se la dimensione totale delle entità nel batch è superiore a 1 megabyte. Allo stesso modo, non sarà possibile inserire un batch se la dimensione totale delle entità nel batch è superiore a 1 megabyte.

Il limite di 1.000 entità è stato rimosso, ma (al momento) è necessario assicurarsi che la dimensione totale dei lotti sia inferiore a 1 megabyte.

+1

Mentre le tue informazioni sono corrette, dovrei chiarire che la domanda riguarda il limite per * query * e non per il recupero in batch. – csytan

3

L'ho provato in produzione e si può effettivamente superare 1 Mb totale per una query. Ho interrotto il test a circa 20 Mb di dimensioni di risposta totali.

from app import models 

# generate 1Mb string 
a = 'a' 
while len(a) < 1000000: 
    a += 'a' 

# text is a db.TextProperty() 
c = models.Comment(text=a) 
c.put() 


for c in models.Comment.all().fetch(100): 
    print c 

uscita:

<app.models.Comment object at 0xa98f8a68a482e9f8> 
<app.models.Comment object at 0xa98f8a68a482e9b8> 
<app.models.Comment object at 0xa98f8a68a482ea78> 
<app.models.Comment object at 0xa98f8a68a482ea38> 
.... 
Problemi correlati