Схемы без указания дизайна для Google App Engine Datastore и других NoSQL DB
Исходя из реляционных баз данных, как я уверен, многие другие, я ищу некоторые твердые рекомендации по настройке/разработке моего хранилища данных в Google App Engine. Существуют ли какие-либо хорошие правила для людей с ограниченными возможностями для создания таких хранилищ данных без схемы? Я понимаю некоторые основы, такие как денормализация, так как вы не можете присоединяться, но мне было интересно, какие другие рекомендации были у людей.
Конкретный простой пример: я работаю над проблемами хранения запросов и их результатов. Например, у меня есть следующие две модели, определенные в приложении Google App Engine с помощью 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)
Я дублирую кучу свойств между моделями ради денормализации, так как я не могу присоединиться к Search
и SearchResult
вместе. Имеет ли это смысл? Или я должен хранить идентификатор поиска в модели SearchResult
и эффективно "присоединяться" к двум моделям в коде, когда я их извлекаю из хранилища данных? Пожалуйста, имейте в виду, что это простой пример. Обе модели будут иметь гораздо больше свойств и способ, которым я сейчас подхожу к этому, я бы поместил любое свойство, которое я поместил в модель поиска в модель SearchResult
, а также.
Ответы
Ответ 1
Не дублируйте свойства, если они всегда будут одинаковыми между SearchResult
и a Search
. Если a SearchResult
должно иметь ссылку на Search
, сохраните ReferenceProperty
, указывая на поиск. В основном это сохраняет в модели Search
Key
.
class SearchResult(db.Model):
search = db.ReferenceProperty(Search, required=True)
# other stuff...
Я также очень рекомендую вам посмотреть некоторые из видеороликов App Engine из прошлогодних Google I/O (и от 2008), в частности этот от Бретта Слаткина и
этот Райана Барретта. Они все очень полезные видеоролики, если у вас есть время, но я обнаружил, что эти два особенно хороши.