0

我有一个带有 PostgreSQL 数据库的 Django 网站。有一个用于“平面”项目表的 Django 应用程序和模型,其中定期插入许多记录,每月最多插入数百万条记录。我想使用这些记录来自动填充事实和维度表的星型模式(最初也在 Django models.py 中建模),以便有效地对记录进行复杂查询,并在 Django 站点上显示来自它们的数据.

两个主要选项不断出现:

1) PostgreSQL 触发器:根据记录的创建或更新,直接配置数据库以将适当的行插入事实表和维度表,可能使用 Python/PL-pgsql 和行级后触发器。优点:适用于 Django 之外的输入;预计效率会更高。缺点:将业务逻辑拆分到另一个位置;其他输入源可能不期望触发插入。

2) Django Signals:使用 Signals 功能在创建或更新记录时使用内置信号 django.db.models.signals.post_save 进行插入。优点:更容易构建和维护。缺点:必须重复一些代码或留在 Django 站点/应用程序环境中以支持新的输入源。

我认为 Django 的内置信号是维护事实表和维度表的方法是否正确?或者是否还有其他一些重要的选择被遗漏了?

4

1 回答 1

0

I ended up using Django Signals. With a flat table "item_record" containing fields "item" and "description", the code in models.py looks like this:

from django.db.models.signals import post_save

def create_item_record_history(instance, created, **kwargs):
    if created:
        ItemRecordHistory.objects.create(
            title=instance.title, 
            description=instance.description, 
            created_at=instance.created_at,
            )
post_save.connect(create_item_record_history, sender=ItemRecord)

It is running well for my purposes. Although it's just creating an annotated flat table (new field "created_at"), the same method could be used to build out a star schema.

于 2013-01-22T22:44:41.600 回答