【问题标题】:Fetching/Inserting huge chunks of data from/to a large table从/向大表中获取/插入大量数据
【发布时间】:2012-08-20 06:13:26
【问题描述】:

我们有一个在线评委(类似于SPOJ.pl),我们会在周末进行这些长达 3 小时的比赛,在比赛结束时,我们收到了将近 1000 份参赛作品。我们将所有这些运行存储在一个表上(包括提交的代码)。目前的表结构如下:

+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| rid        | int(11)  | NO   | PRI | NULL    | auto_increment |
| pid        | int(11)  | YES  |     | NULL    |                |
| tid        | int(11)  | YES  |     | NULL    |                |
| language   | tinytext | YES  |     | NULL    |                |
| name       | tinytext | YES  |     | NULL    |                |
| code       | longtext | YES  |     | NULL    |                |
| time       | tinytext | YES  |     | NULL    |                |
| result     | tinytext | YES  |     | NULL    |                |
| error      | text     | YES  |     | NULL    |                |
| access     | tinytext | YES  |     | NULL    |                |
| submittime | int(11)  | YES  |     | NULL    |                |
| output     | longtext | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

现在的问题是,每次我们在其中查询时使用ORDER BY 子句,最终都会对整个表进行排序。如果超过 1000 行,每行都包含大量数据,则所花费的时间很重要。请注意,这是在OPTIMIZE-ing 表格定期表示对提交内容进行了更改之后。我们确实有两个选择:

  1. 大约 100 个条目后拆分表格。
  2. 将大量数据(提交的代码)存储为文件,而不是将它们作为值插入表中以减少开销。

如果我们实际上可以保持表结构原样,是否还有另一种替代/解决方法?我真的可以在这里使用一些帮助。谢谢。

【问题讨论】:

  • @ManMohanVyas,建议不仅要更改 RDBMS,还要更改 DBMS,因为 OP 在他们的表中有一些记录,在我看来,这是一个巨大的过度反应。 1000 行是一张非常小的表格,无论它们有多宽。
  • 你的查询是什么,你的表结构,解释计划和索引? RDBMS 旨在处理您所说的很多很多倍的数据量。
  • @Ben : 我已经添加了表格的结构。

标签: mysql


【解决方案1】:

我的建议是做一些称为垂直分区的事情:将表拆分为具有不同列的多个表。

在这种情况下,我将有一个包含所有小数据的表:rid、pid、tid、语言、名称、时间、结果、访问、提交时间。

第二个表应该有:rid、code、error、output。

这样,您可以对第一个表进行排序,然后在排序后加入其他字段。我把代码、错误和输出放在一起,因为它们似乎是在一起的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2017-08-20
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多