将列转换为行的性能影响

时间:2013-05-17 11:33:36

标签: sql database postgresql javadb

我打算使用JavaDB(Derby)或PostgreSQL。

我有以下问题:我需要存储一大组矢量。目前,所有向量都包含固定数量的元素。因此,存储集合的适当方式是每个向量使用一行,每个元素使用一列。但是,元素的数量可能会随时间而变化。此外,在我的情况下,从软件工程的角度来看,具有固定数量的列反映了关于通用模型应该不知道的软件组件的知识。

因此,我正在考虑“线性化”布局,并使用存储元素而不是向量的通用表。

然后可以像这样查询向量5的第一个元素:

SELECT value FROM elements where v_id = 5 and e_id = 1;

一般来说,我不需要全表读取,只能访问相对较小的向量子集。

也许精通数据库的人可以判断性能影响是什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

这是一般数据库术语中称为Entity-Attribute-Value或EAV设计的变体。这是一个关系数据库设计反模式,在大多数情况下应该避免。由于需要许多自联接,性能往往很差,而查询最多也是丑陋的。

在PostgreSQL中查看intarray扩展名,如果值是简单整数,它应该非常理想地解决你的问题。否则考虑PostgreSQL的标准数组类型。他们有自己的问题,但通常比EAV好很多,尽管从JDBC工作起来并不是很好。

否则,如果 all 存储的是这些向量,可以考虑使用非关系数据库。