Progettazione GAE ndb, prestazioni e utilizzo di proprietà ripetute

Diciamo che ho una galleria di immagini e un’immagine potrebbe potenzialmente avere fan di 100k +. Quale design ndb è più efficiente?

class picture(ndb.model): fanIds = ndb.StringProperty(repeated=True) ... [other picture properties] 

o

 class picture(ndb.model): ... [other picture properties] class fan(ndb.model): pictureId = StringProperty() fanId = StringProperty() 

Esiste un limite al numero di elementi che è ansible aggiungere a una proprietà ripetuta ndb e c’è qualche impatto sulle prestazioni con l’archiviazione di una grande quantità di elementi in una proprietà ripetuta? Se è meno efficiente usare proprietà ripetute, qual è il loro uso previsto?

Non usare proprietà ripetute se hai più di 100-1000 valori. (Probabilmente 1000 lo sta già spingendo). Non erano progettati per tale uso.

Generalmente v1 sarebbe molto più economico.

In termini di costi di lettura / scrittura, si paga per quadro il recupero / la scrittura, quindi si desidera ridurre il numero di quadro. la versione 1 sarà più economica. Significativamente più economico se recuperi ogni fan ogni volta che recuperi un’immagine.

Tuttavia, ciascuna entity framework è limitata a 1 MB. Se hai fan di 100k +, potresti raggiungere quel limite in base alla dimensione del tuo fan. Non contano i tuoi altri dati di immagine, quindi potresti far saltare il limite di 1 MB. Dovrai aggiungere un codice più complesso per gestire i casi di overflow.

Le grandi quadro impiegano più tempo a recuperare rispetto alle piccole entity framework. Se stai andando a prendere tutti i fan contemporaneamente, v1 andrà meglio. Se vuoi solo dire di dire 5 fan in qualsiasi punto, v2 potrebbe essere più veloce (solo potrebbe). Se invece provi a conquistare quadro fan di 100k … ci vorrà per sempre.