我刚刚开始关注非关系型数据库,所以我想请求帮助将这些传统的SQL / django模型转换为Google App Engine模型。
该示例适用于活动列表,其中每个活动都有一个类别,属于一个场地,并且场地附有许多照片。
在django中,我会像这样建模数据:
class Event(models.Model)
title = models.CharField()
start = models.DatetimeField()
category = models.ForeignKey(Category)
venue = models.ForeignKey(Venue)
class Category(models.Model):
name= models.CharField()
class Venue (models.Model):
name = models.CharField()
address = models.CharField()
class Photo(models.Model):
venue = models.ForeignKey(Venue)
source = models.CharField()
我如何使用App Engine模型完成等效工作?
答案 0 :(得分:1)
这里没有任何必须去规范化才能使用App Engine。您可以将ForeignKey更改为ReferenceProperty,将CharField更改为StringProperty,将DatetimeField更改为DateTimeProperty并完成。将类别存储为字符串而不是引用可能更有效,但这取决于使用情况。
当您开始设计查询时,非规范化变得很重要。与传统SQL不同,您无法编写可访问每个表的每一行的即席查询。您要查询的任何内容都必须由索引满足。如果您今天运行依赖于表扫描和复杂连接的查询,则必须确保查询参数在写入时编制索引,而不是动态计算它们。
例如,如果您希望按事件标题进行不区分大小写的搜索,则必须在写入时在每个实体上存储标题的小写副本。在不猜测您的查询要求的情况下,我无法提供更具体的建议。
答案 1 :(得分:0)
可以在App Engine上运行Django
您需要从这里获得三个应用程序: http://www.allbuttonspressed.com/projects
此外,此模块可以跨数据存储区方法不直接支持的外键关系进行连接:
...它会对要加入的字段进行非规范化,但有一些限制 - 不会自动更新非规范化值,因此只适用于静态值
Django信号为自动非规范化提供了一个有用的起点。