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