适用于Google App Engine数据存储区和其他NoSQL DB的无架构设计指南

时间:2010-04-16 12:58:08

标签: google-app-engine database-design nosql google-cloud-datastore

来自关系数据库背景,我相信很多其他人,我正在寻找一些在Google App Engine上设置/设计我的数据存储的可靠指南。人们是否有任何好的经验法则来设置这些无架构的数据存储?我理解一些基本知识,例如非规范化,因为你不能做连接,但我想知道人们有什么其他建议。

我正在处理的特定简单示例涉及存储搜索及其结果。例如,我使用Python在我的Google App Engine应用程序中定义了以下两个模型:

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)

我为了非规范化而在模型之间复制了一堆属性,因为我无法将SearchSearchResult连接在一起。这有意义吗?或者我应该在SearchResult模型中存储搜索ID,并在从数据存储区检索时将这两个模型有效地“加入”代码中?请记住,这是一个简单的例子。这两个模型将具有更多属性以及我现在接近这个的方式,我会在SearchResult模型中放置我在搜索模型中放置的任何属性。

1 个答案:

答案 0 :(得分:6)

如果属性在SearchResultSearch之间始终相同,请勿复制这些属性。如果SearchResult应该引用Search,请保持ReferenceProperty指向搜索。这基本上将相关Search的{​​{1}}存储在模型中。

Key

我还强烈建议您观看部分App Engine videos from last year's Google I/O(以及来自2008),特别是Brett Slatkin的this one,以及 this one作者:Ryan Barrett。如果你有时间,他们都是非常有用的视频,但我发现这两个特别是真的很棒。