来自关系数据库背景,我相信很多其他人,我正在寻找一些在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
.
如果属性在SearchResult
a和a 之间始终相同,请不要复制属性Search
.如果a SearchResult
应该引用a Search
,请ReferenceProperty
指向Search.这基本上将相关Search
的存储Key
在模型中.
class SearchResult(db.Model): search = db.ReferenceProperty(Search, required=True) # other stuff...
我也强烈建议你看一些从去年的谷歌I/O的App Engine视频(和2008年),特别是这一个由布雷特·斯拉特金,而 这个由Ryan巴雷特.如果你有时间,他们都是非常有用的视频,但我发现这两个特别是非常好.