首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sql数据库中优化保存二维数组快照

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

Stack Overflow用户
提问于 2013-03-22 18:46:28
回答 2查看 632关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2013-03-22 18:48:53

下面是一个包含以下列的表:

(id,) state_number、行、列、值

票数 0
EN

Stack Overflow用户

发布于 2013-03-22 19:09:15

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

MySQL通常被归类为“重型工具”。重型工具很好地解决了相当广泛的问题,但通常也有其独特的特点,即它们做得好、做得差或根本不做。对于所有的重型工具,挑战是在您的问题和重型工具的特性之间找到最接近的匹配,然后以最简单的方式弥合差距。您正在执行步骤2。

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

对于您的特定问题,我所能找到的最接近MySQL特性的匹配是与您的相同的:如下所示的表。

列:

代码语言:javascript
运行
复制
id dataset_time col1 col2 col3 col4 col5 col6 col7 col8 col9 col10

auto increment: id
primary key: id

解决方案第2步:弥合剩余差距

但是,正如您已经注意到的,为每个矩阵创建一个表并不是弥合您的问题和MySQL所能做的事情之间剩余差距的最简单方法。MySQL可以在表名中使用数字索引创建数以千计的表,但它在这方面做得很差。

弥补这一差距的最简单方法是引入一个名为dataset_id的额外列,使该表看起来像这样:

列:

代码语言:javascript
运行
复制
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

您应该手动递增dataset id,并将其插入每一行和相应的时间。这比通过时间识别每个数据集更健壮。

然后,您可以像这样检索数据集:

代码语言:javascript
运行
复制
SELECT * FROM matrices WHERE dataset_id=761

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15568401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档