【问题标题】:de-normalizing data model: django/sql -> app engine反规范化数据模型:django/sql -> 应用引擎
【发布时间】:2011-12-25 09:36:47
【问题描述】:

我刚刚开始了解非关系型数据库,所以我想请教一些关于将这些传统 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 模型完成等效操作?

【问题讨论】:

    标签: database django google-app-engine data-modeling denormalization


    【解决方案1】:

    这里没有任何内容必须被去规范化才能与 App Engine 一起使用。您可以将 ForeignKey 更改为 ReferenceProperty,将 CharField 更改为 StringProperty,将 DatetimeField 更改为 DateTimeProperty 并完成。将类别存储为字符串而不是引用可能更有效,但这取决于使用上下文。

    当您开始设计查询时,非规范化变得很重要。与传统 SQL 不同,您不能编写可以访问每个表的每一行的临时查询。您要查询的任何内容都必须由索引来满足。如果您现在正在运行依赖于表扫描和复杂连接的查询,则必须确保查询参数在写入时被编入索引,而不是动态计算它们。

    例如,如果您想按事件标题进行不区分大小写的搜索,则必须在写入时在每个实体上存储标题的小写副本。如果不猜测您的查询要求,我真的无法提供更具体的建议。

    【讨论】:

      【解决方案2】:

      可以在 App Engine 上运行 Django

      您需要三个应用程序: http://www.allbuttonspressed.com/projects

      • Django-nonrel
      • djangoappengine
      • django 工具箱

      此外,此模块可以跨外键关系进行连接,而数据存储区方法不直接支持:

      • django-dbindexer

      ...它将您要加入的字段非规范化,但有一些限制 - 不会自动更新非规范化值,因此仅适用于静态值

      Django 信号为自动反规范化提供了一个有用的起点。

      【讨论】:

        猜你喜欢
        • 2022-11-24
        • 2014-07-15
        • 2015-09-04
        • 2015-02-01
        • 2015-01-28
        • 2018-09-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        相关资源
        最近更新 更多