Pregunta

Estoy construyendo una aplicación con una relación de muchos a muchos; Un elemento de entidad 'Imagen' puede estar vinculado a cualquier número de galerías ( 'Galería'). Y, por supuesto, una galería puede contener cualquier número de imágenes.

Así que, después de la Google sugerencia aquí, voy a utilizar una lista en 'imagen' que contiene las claves externas de 'Galería'. Este es el enfoque BigTable.

(El enfoque de estilo antiguo relacional DB sería tener una tabla / de la entidad en el medio 'Imagen' y 'Galería').

Aquí está mi pregunta:? Al almacenar la clave, debería ir a dar un "StringListProperty" en la 'imagen' o lo haría un "ListProperty (db.Key)" trabajo mejor

Una de las razones que veo para un StringList sería, que podía almacenar también otros valores a continuación, llaves, pero por otro lado que iba a ser el estilo sucio de todos modos. Pero también estoy bastante seguro de que Google sugiere no utilizar más de una lista en una entidad debido a que el índice (es) va a explotar. Así que esto me va a impedir una puerta trasera.

En cuanto a la ListProperty con el tipo " Clave " un punto sería la verificación automática, si el valor es en realidad una clave.

Como es muy fácil de convertir cadenas de claves y viceversa, no veo ninguna razón para que uno de los tipos de lista a preferir aquí.

Cuando se trata de problemas de rendimiento, no tengo ninguna idea sobre cómo podría probar esto - pero parece que este será el principal factor en esta decisión

.

curioso acerca de su entrada. Especialmente si alguien ha probado el rendimiento de tal o sería tan amable y hacerlo.

Cheers, // Hannes

¿Fue útil?

Solución

Utilice un db.ListProperty(db.Key) si está con la intención de almacenar listas de claves. Se almacenarán en una representación binaria, que es más compacto que la representación de cadena que usaría en una lista de cadenas.

Tienes razón que la mezcla de claves con otros objetos en una lista es desordenado. Tener varias listas en una entidad está bien, siempre y cuando no indexar más de uno de ellos en el mismo índice personalizado -. Que es lo que causa la explosión de índices

Otros consejos

Uso db.ListProperty (db.Key), esto es hará que las recuperación de datos más fácil que la cadena .. si Galería modelo tiene propiedad tenía pic_list que es de tipo db.ListProperty (db.Key), que contiene la lista de llaves de la entidad de imagen .. Suponga imagen es el nombre de la entidad .. entonces Picture.get (// // GalleryObject. pic_list) obtendrán todas las eNTIDADES imagen ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top