0

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

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

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

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

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

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

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

提前谢谢了。

4

1 回答 1

3

这是在一般数据库术语中称为实体-属性-值或 EAV 设计的变体。这有点像关系数据库设计的反模式,在大多数情况下应该避免。由于需要许多自联接,性能往往很差,而且查询充其量是丑陋的。

在 PostgreSQL 中查看intarray扩展,如果值是简单的整数,它应该非常理想地解决您的问题。否则考虑 PostgreSQL 的标准数组类型。它们有自己的问题,但通常比 EAV 好得多,尽管它们不适合从 JDBC 使用。

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

于 2013-05-17T12:18:38.727 回答