我有一个具有数百个属性的模型。属性可以是不同的类型(整数、字符串、上传的文件……)。我想从最重要的属性开始逐步实现这个复杂的模型。我可以想到两个选择:
- 将属性定义为常规模型字段
- 定义一个单独的模型来分别保存每个属性,并使用
ForeignKey
我还没有找到任何关于如何使用 django 处理具有大量属性的模型的建议。两种方法的优点/缺点是什么?
你绝对应该not将您的属性定义为外键。每次您需要完整的模型时,您的数据库服务器都必须生成数百个JOINs
,因此破坏了你的表现。
如果几乎每次访问模型时都需要您的属性,则应将它们保留在同一模型中。如果没有的话,你可以单独制作一个Properties
模型并将其链接到您的原始模型OneToOneField
.
我个人就有过这样的经历。我们必须建立一个酒店推荐引擎,我们正在使用Drupal http://drupal.org那时。由于 Drupal 将每个自定义属性存储在单独的 MySQL 表中,我们很快意识到我们应该切换框架,因为每个查询都会使我们的生产服务器崩溃(20 多个 JOIN 对 MySQL 来说是致命的)。顺便说一句,我们最终使用了基于的自定义解决方案弹性搜索 http://elastic.co,它可以很好地处理数百个字段。
Update:如果您足够幸运能够使用最新版本的 PostgreSQL,您可以利用JSONField https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#jsonfield存储将所有字段打包到单个模型字段中。但请注意,您必须自己实施验证方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)