我有一个数据源,可以生成数百万个二维双数组(矩阵)条件。尺寸的大小不断变化(但可以通过数学变换简化情况,只允许一个尺寸改变尺寸)。因此,我需要将此矩阵的所有状态保存到数据库中(她的近似大小从10x50到10x100 - 第二个维度大小随时间变化)。如果我使用时间作为主键,这意味着我将不得不创建数百万个表,每个表将包含10列和50到100行...这不是很方便。有没有办法更有效地分组矩阵状态?我是SQL的新手。
答案 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具有高效的索引功能和优雅的语法,可以检索数百万行中的几十行,因此可以说它非常好。这是您的最佳解决方案。