Django Postgres阵列

Django Postgres阵列,django,postgresql,Django,Postgresql,我们正在使用模块在postgres中使用数组。我一直在做一些关于postgres数组的研究,一些开发人员说他们不建议使用存储超过X个值的postgres数组。有时候,这是十个,我听过多达三十个。在性能开始下降之前,对于一个数组中可以或应该存储多少个值,是否存在共识 作为参考,上述数据库主要为只读数据库 我们正试图决定应该在哪里使用中间表,以及应该在哪里使用postgres数组 还有一个相关问题:当针对表中的列创建索引时,该列存储数组值(比如bigint[])。我意识到存储在数组中的值不会被索引,

我们正在使用模块在postgres中使用数组。我一直在做一些关于postgres数组的研究,一些开发人员说他们不建议使用存储超过X个值的postgres数组。有时候,这是十个,我听过多达三十个。在性能开始下降之前,对于一个数组中可以或应该存储多少个值,是否存在共识

作为参考,上述数据库主要为只读数据库

我们正试图决定应该在哪里使用中间表,以及应该在哪里使用postgres数组

还有一个相关问题:当针对表中的列创建索引时,该列存储数组值(比如bigint[])。我意识到存储在数组中的值不会被索引,而只是数组本身(我假设这类似于C指针)。与简单地使用中间表相比,这有多高效

我们可能需要针对这些值创建连接,或者在where子句中有一些特定的值,我担心一些性能可能会降低,因此在需要创建连接时,最好使用一个中间表

最后,考虑到我们使用的是dbarray,与简单地使用带有标准django-ORM的中间表相比,它的效率是多少(假设没有连接是上述问题中的where子句)


谢谢您

PostgreSQL
支持Intarray上的
GIN
GiST
索引,这允许您运行如下查询:

SELECT  *
FROM    mytable
WHERE   myarray @> ARRAY[1, 2]
-- returns arrays which contain 1 AND 2
或者这个:

SELECT  *
FROM    mytable
WHERE   myarray && ARRAY[1, 2]
-- returns arrays which contain 1 OR 2
效率高


第一个查询很难使用规范化模式有效地重写。

我是相信X永远不应该大于1的开发人员之一。数组和数据库通常是糟糕的mojo…它们不再是“自由文本”字段,这使得查询和排序的执行非常糟糕,特别是当您试图在数组中加入特定值时。如果您从未打算编写SQL,我想它可以用作基本数据存储。如果您想针对它编写SQL…我在这里看到的首选方法是将其移动到一个名称-值对表中,该表允许灵活地存储在表中的字段(所以中间表是这样)。