9

Viniendo de un fondo de base de datos relacional, como estoy seguro de que hay muchas otras, estoy buscando algunas pautas sólidas para configurar/diseñar mi almacén de datos en Google App Engine. ¿Hay alguna buena regla general que las personas tengan para configurar estos tipos de almacenes de datos sin esquema? Entiendo algunos de los conceptos básicos, como la desnormalización, ya que no se pueden hacer uniones, pero me preguntaba qué otras recomendaciones tenían las personas.Directrices de diseño sin esquema para Google App Engine Datastore y otras bases de datos NoSQL

El ejemplo simple en particular con el que estoy trabajando se refiere al almacenamiento de búsquedas y sus resultados. Por ejemplo, he los siguientes dos modelos definidos en mi aplicación de Google App Engine utilizando Python:

class Search(db.Model): 
    who = db.StringProperty() 
    what = db.StringProperty() 
    where = db.StringProperty() 

    createDate = db.DateTimeProperty(auto_now_add=True) 

class SearchResult(db.Model): 
    title = db.StringProperty() 
    content = db.StringProperty() 

    who = db.StringProperty() 
    what = db.StringProperty() 
    where = db.StringProperty() 

    createDate = db.DateTimeProperty(auto_now_add=True) 

estoy duplicar un montón de propiedades entre los modelos en aras de la desnormalización ya que no puedo unirse Search y SearchResult juntos. ¿Esto tiene sentido? ¿O debería almacenar un ID de búsqueda en el modelo SearchResult y efectivamente "unir" los dos modelos en el código cuando los recupero del almacén de datos? Tenga en cuenta que este es un ejemplo simple. Ambos modelos tendrán muchas más propiedades y la forma en que me estoy acercando a esto en este momento, pondría cualquier propiedad que puse en el modelo de búsqueda en el modelo SearchResult también.

Respuesta

6

No duplique las propiedades si siempre serán las mismas entre SearchResult y Search. Si un SearchResult debe tener una referencia a Search, mantenga un ReferenceProperty apuntando a la búsqueda. Esto básicamente almacena el SearchKey relacionado en el modelo.

class SearchResult(db.Model): 
    search = db.ReferenceProperty(Search, required=True) 
    # other stuff... 

también recomiendo encarecidamente que ver algunas de las App Engine videos from last year's Google I/O (y desde 2008), en particular this one por Brett Slatkin, y this one por Ryan Barrett. Todos son videos muy útiles si tienes tiempo, pero encontré esos dos en particular para ser realmente genial.

+0

Excelente, gracias hombre. – jamesaharvey

Cuestiones relacionadas