He visto ejemplos con preguntas similares. Pero, permítame hacer preguntas más específicas que quiero confirmar mi comprensión.

Mis preguntas:

  1. Para ListProperty de db.Key, si puedo anticipar el número máximo de claves que quiero almacenar, ¿cuántas debo NO exceder para almacenar en ListProperty de db.Key en comparación con ReferencedProperty? [Pregunta general] porque no estaba muy claro dónde dice esto la página de App Engine,

    Otro más importante es que desea evitar almacenar demasiado grandes listas de claves en ListProperty

  2. Digamos que hay usuarios que pueden seguir los feeds de actividades del restaurante. Por lo tanto, el usuario puede agregar tantos restaurantes como desee a su lista de favoritos. Hay modelo de usuario y modelo de restaurante. Entonces, ¿creo que ningún usuario seguiría más de 30 restaurantes? lo que lo convierte en ListProperty de db.Key como la solución ideal?

1
MrCooL 13 feb. 2012 a las 21:29

1 respuesta

La mejor respuesta

Las consideraciones aquí son algo confusas: no hay un límite estricto, excepto que la entidad total (codificada) no debe ser mayor de 1 MB. 30 teclas está totalmente bien. 100 todavía estaría bien. En 500-1000 comenzaba a preocuparme. A 10,000 probablemente excederá el límite de 1 MB.

Otra consideración es que si espera agregar claves a la lista una a la vez (cada vez que lee y escribe la entidad) termina en la tierra O (N ** 2), lo que haría que sus actualizaciones comenzaran a rastrear muy lentamente, probablemente en algún lugar entre 100 y 1000 teclas.

Estas consideraciones son las mismas para todas las ListProperties: las claves no son especiales (la cita que proporcionó proviene de un artículo que se centra en ListProperty(db.key)).

2
Guido van Rossum 15 feb. 2012 a las 22:06
Estamos muy necesitados de rendimiento, según sus experiencias, ¿recomendaría utilizar db.referenceproperty según el caso que describí anteriormente?
 – 
MrCooL
11 mar. 2012 a las 14:52
1
TBH, es mucho más probable que ReferenceProperty lo ralentice, ya que es fácil activar accidentalmente su comportamiento de "carga automática" (lo que le cuesta un viaje de ida y vuelta adicional al almacén de datos).
 – 
Guido van Rossum
18 mar. 2012 a las 08:06