我需要针对整数ID和字符串名称存储长度约为1000的整数数组。这样的元组数量几乎是160000.
我将选择一个数组并计算所有其他数据的均方根偏差(RMSD),并将(ID1,ID2,RMSD)元组存储在另一个表中。
请您建议最好的方法吗?我目前正在将MySQL用于同一项目中的其他数据表,但如果有必要,我会切换。
答案 0 :(得分:3)
一种可能性是将数组存储在BINARY
或BLOB
类型列中。鉴于数组的基类型是一个整数,您可以一次单步执行四个字节来提取每个索引的值。
如果我正确理解了上下文,那么数组必须都具有相同的固定长度,因此BINARY
类型列最有效,如果它提供足够的空间来容纳数组。您不必担心这里的数据库规范化,因为您的数组在此上下文中是一个原子单位(再次,假设我正确理解了问题)。
如果您确实需要只访问每个数组的一部分,那么这可能不是存储数据的最实用方法。
次要考虑因素是计算数据库本身的RMSD值,还是服务器上的某种外部语言。正如您在评论中提到的,这在数据库中最有效。然而,听起来查询将相当昂贵,并且执行时间可能不是主要关注点:用另一种语言编写简单性可能更为可取。另外,根据计算RMSD值相对于向数据库进行往返查询的成本计算的成本,它甚至可能没有那么大的差别?
或者,正如您在问题中所提到的那样,使用Postgres值得考虑,因为它具有更具表现力的PL/pgSQL
语言。
顺便提一下,如果您想搜索有关优秀方法的更多信息,搜索database
和time series
可能会很有成效。您的数据不一定是时间序列数据,但许多相同的考虑因素都适用。