Lo siento si esta pregunta es demasiado simple; Solo estoy ingresando al noveno grado.¿Relaciones más eficaces de uno a muchos en el almacén de datos de Google App Engine?
Estoy tratando de aprender sobre el diseño de bases de datos NoSQL. Quiero diseñar un modelo de Google Datastore que minimice el número de lecturas/escrituras.
Aquí hay un ejemplo de juguete para una publicación de blog y comentarios en una relación de uno a varios. ¿Qué es más eficiente: almacenar todos los comentarios en una propiedad estructurada o usar KeyProperty en el modelo de comentarios?
Una vez más, el objetivo es minimizar el número de lecturas/escrituras en el almacén de datos. Puede hacer las siguientes suposiciones:
- Los comentarios no se recuperarán independientemente de sus respectivas publicaciones de blog. (Sospecho que esto hace que el StructuredProperty más preferible.)
- Comentarios tendrán que ser clasificables por fecha, clasificación, autor, etc. (subpropiedades en el almacén de datos no pueden ser indexados, así que quizás esto podría afectar al rendimiento?)
- Tanto las publicaciones de blog como los comentarios se pueden editar (o incluso eliminar) una vez que se hayan creado.
Usando StructuredProperty:
from google.appengine.ext import ndb
class Comment(ndb.Model):
various properties...
class BlogPost(ndb.Model):
comments = ndb.StructuredProperty(Comment, repeated=True)
various other properties...
Usando propiedadClave:
from google.appengine.ext import ndb
class BlogPost(ndb.Model):
various properties...
class Comment(ndb.Model):
blogPost = ndb.KeyProperty(kind=BlogPost)
various other properties...
dude en plantear cualquier otras consideraciones que se refieren a la representación de forma eficaz una relación de uno a varios con respecto a la minimización el número de lecturas/escrituras en el almacén de datos.
Gracias.
Considere cómo resolvería el problema del tamaño total de los comentarios y la publicación de blog que es mayor que 1MB. ¿Puede pasar alguna vez? Si pudiera y no tiene una buena solución para lidiar con eso, parecería desde el punto de vista de la funcionalidad pura que ni siquiera se molestaría con una sola entidad que contenga ambos. –
Una alternativa podría ser simplemente almacenar todas las claves de los comentarios en la publicación del blog. Luego puede recuperar todos los comentarios con un solo ndb.get_multi (claves), pero permitiría un número significativamente mayor de comentarios, y si aún supera los 1MB, puede delegar la recuperación de los comentarios individualmente –