如何在sql数据库中优化保存二维数组的快照

时间:2013-03-22 10:46:28

标签: sql sql-server relational-database

我有一个数据源,可以生成数百万个二维双数组(矩阵)条件。尺寸的大小不断变化(但可以通过数学变换简化情况,只允许一个尺寸改变尺寸)。因此,我需要将此矩阵的所有状态保存到数据库中(她的近似大小从10x50到10x100 - 第二个维度大小随时间变化)。如果我使用时间作为主键,这意味着我将不得不创建数百万个表,每个表将包含10列和50到100行...这不是很方便。有没有办法更有效地分组矩阵状态?我是SQL的新手。

2 个答案:

答案 0 :(得分:0)

具有以下列的表如何:

(id,)state_number,row,column,value

答案 1 :(得分:0)

理论:如何使用繁重的工具(如MySQL)

MySQL通常被归类为"重型工具"。重型工具可以很好地解决相当广泛的问题,但通常在他们做得好,做得差或根本不做的方面也具有独特的特征。使用所有重型工具,挑战在于找到问题与繁重工具特性之间最接近的匹配,然后以最简单的方式弥合差距。您正在处理第2步。

解决方案步骤1:您与工具之间最接近的匹配

我可以根据您的具体问题得出最接近的匹配MySQL的特性与您的相同:表格看起来像这样。

列:

id dataset_time col1 col2 col3 col4 col5 col6 col7 col8 col9 col10

auto increment: id
primary key: id

解决方案步骤2:缩小剩余差距

然而,正如您所注意到的,每个矩阵创建一个表并不是弥合问题与MySQL可以做的事情之间的剩余差距的最简单方法。 MySQL可以在表名中创建数千个带有数字索引的表,但它会做得很差。

弥合差距的最简单方法是引入一个名为dataset_id的附加列,使表格如下所示:

列:

id dataset_time col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 dataset_id

auto increment: id
primary key: id
non-unique index: dataset_id

您应手动增加数据集ID并将其插入每行和相应的时间。这比按时间识别每个数据集更有效。

然后你可以检索这样的数据集:

SELECT * FROM matrices WHERE dataset_id=761

MySQL具有高效的索引功能和优雅的语法,可以检索数百万行中的几十行,因此可以说它非常好。这是您的最佳解决方案。