Рекомендации по проектированию без схемы для хранилища данных Google App Engine и других баз данных NoSQL
Исходя из опыта работы с реляционными базами данных, как, я уверен, многие другие, я ищу некоторые надежные рекомендации по настройке / проектированию моего хранилища данных в 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
модель также.