来自关系数据库背景,我相信很多其他人,我正在寻找一些在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)
我为了非规范化而在模型之间复制了一堆属性,因为我无法将Search
和SearchResult
连接在一起。这有意义吗?或者我应该在SearchResult
模型中存储搜索ID,并在从数据存储区检索时将这两个模型有效地“加入”代码中?请记住,这是一个简单的例子。这两个模型将具有更多属性以及我现在接近这个的方式,我会在SearchResult
模型中放置我在搜索模型中放置的任何属性。
答案 0 :(得分:6)
如果属性在SearchResult
和Search
之间始终相同,请勿复制这些属性。如果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。如果你有时间,他们都是非常有用的视频,但我发现这两个特别是真的很棒。