【问题标题】:What is the most efficient way to create models for storing tags in Django 1.9 and Postgres 9.5?在 Django 1.9 和 Postgres 9.5 中创建用于存储标签的模型的最有效方法是什么?
【发布时间】:2017-11-29 18:41:57
【问题描述】:

我想创建一个模型,我可以选择从基于标签的 postgres 数据库中提取一组项目及其描述。在我不经常修改的数据上使用 Django 1.9 和 Postgres 9.5 来提高性能的最有效方法是什么?

我发现了多种方法:

毒液 其中制作了 3 个表,一个存储项目和描述,第二个存储标签,第三个表将标签与项目相关联。看这里: What is the most efficient way to store tags in a database?

使用数组字段 有一个表,其中包含项目、描述和存储标签的数组字段

使用 JSON 字段 有一个表,其中包含项目、描述和存储标签的 JSON 字段。 django 文档提到这使用 JSONB:https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/fields/

我猜想使用如下 JSON 字段:

from django.contrib.postgres.fields import JSONField
from django.db import models

class Item(models.Model):
    name = models.CharField()
    description = models.TextField(blank=True, null=True)
    tags = JSONField()

读取数据效率最高,但我不太确定。

【问题讨论】:

    标签: python json django postgresql


    【解决方案1】:

    这些中没有一个是“最有效率的”,这真的取决于你专注于什么。

    First 是经典的关系方法,提供一致性和规范化。它还允许您检索复杂的信息(即给我所有带有标签 T 的项目) 非常容易(但通常需要连接成本)。如果您使用的是 RDBMS,我认为这应该是您的首选解决方案。

    Secondthird(在您的情况下几乎相同)更容易进行简单的检索和存储(即 给我一个项目的所有标签 I),但需要做更多工作来保持数据的一致性和执行复杂的查询。

    【讨论】:

    • 第二个和第三个选项在查询速度上有什么区别?
    • @ccsv 在大多数情况下,我会押注带有索引的 JSON(例如,参见 GIN 索引)。
    猜你喜欢
    • 2010-11-09
    • 2010-09-24
    • 2015-10-15
    • 2010-12-17
    • 2011-05-24
    • 1970-01-01
    • 2017-11-07
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多