tutorial que google google-app-engine database-design nosql google-cloud-datastore

google-app-engine - que - google cloud storage



Directrices de diseƱo sin esquema para Google App Engine Datastore y otros NoSQL DBs (1)

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

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

También le recomiendo que vea algunos de los videos de App Engine de Google I / O del año pasado (y de 2008 ), en particular este de Brett Slatkin, y este de Ryan Barrett. Todos son videos muy útiles si tienes tiempo, pero encontré esos dos en particular para ser realmente genial.

Procedente de un fondo de base de datos relacional, como estoy seguro de que hay muchos otros, 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.

El ejemplo simple particular con el que estoy trabajando se refiere a almacenar búsquedas y sus resultados. Por ejemplo, tengo los siguientes dos modelos definidos en mi aplicación Google App Engine usando 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 duplicando un conjunto de propiedades entre los modelos en aras de la desnormalización ya que no puedo unir Search y SearchResult . ¿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 ahora mismo, pondría cualquier propiedad que incluí en el modelo de Búsqueda en el modelo SearchResult también.