我想制作一个模型,我可以根据标签从postgres数据库中提取一组项目及其描述。使用Django 1.9和Postgres 9.5对我不经常修改的数据进行性能的最有效方法是什么?
我找到了多种方法:
Toxi解决方案 在制作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()
是最有效的阅读数据,但我不太确定。
答案 0 :(得分:0)
没有一个人“最有效率”,这实际上取决于你所关注的内容。
首先是经典关系方法,它提供一致性和规范化。它还允许您检索复杂的信息(即给我带有标签T的所有项目)非常简单(但通常需要加入成本)。我认为如果你使用的是RDBMS,这应该是你的goto解决方案。
第二和第三(在您的情况下大致相同)更容易进行简单的检索和存储(即给我一个项目的所有标记我< / em>),但是可以为保持数据一致性和执行复杂查询做更多的工作。