Рекомендации по проектированию без схемы для хранилища данных 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 модель также.

Ответы на вопрос(1)

Ваш ответ на вопрос