1

我正在处理一个现有的 PHP/MySql/JS/Ajax Web 应用程序,它为用户处理大量的表行。这是页面当前的工作方式。

  1. 用户上传 LARGE csv 文件。我正在使用的测试有 400,000 行(每行有 5 列)。
  2. php 为这些数据创建了一个全新的表并插入了数十万行。
  3. 然后页面以有用的方式对这些数据进行排序/处理/显示给用户。处理包括搜索、按日期和其他行排序并重新显示它们而无需大量加载时间(这就是 JS/Ajax 的用武之地)。

我的问题是这个应用程序应该为每次上传将数据放入一个新表中,还是将每个文件的 id 放入一个大表中?我认为原始开发人员出于速度目的添加了单独的表格。速度对此非常重要。

有更快的方法吗?有没有更好的捕鼠器?有没有人对此感到厌烦?

请记住,每个 .csv 可以包含数十万行,并且每天可以上传数百个 .csv 文件。虽然它们可以在最后一次使用后大约 24 小时被删除(我在想 cron 工作有什么意见吗?)

谢谢你们!

基于评论的一些注释:

  • 所有数据对于每个用户都是唯一的并且会发生变化,因此用户不会在几个小时后重新访问这些数据。只有当他们不小心关闭窗口然后又回来时,他们才会真正重新访问相同的 .csv。
  • 不需要外键所有 csv 对每个用户都是私有的,不需要交叉引用。
4

2 回答 2

2

给定每天 10 5行和 10 2 CSV,您每天查看 1000 万行(并且您说您会定期清除这些数据)。对于一个体面的数据库来说,这看起来并不可怕(特别是考虑到您可以在表内而不是跨多个表进行索引)。

显然,最常用的 CSV 可以很容易地保存在内存中以提高访问速度 - 甚至可能是所有这些(如果您每超过 24 小时刷新一次,基于几乎没有数据的非常简单的计算给我一个 1Gb 的数字。1Gb 是这些天不是不合理的内存量)

于 2012-12-07T15:13:24.447 回答
2

出于无法更改数据结构的简单原因,我会回避将所有数据放入单个表中。

由于无论如何都会删除数据,并且您不需要组合来自不同负载的数据,因此没有明显的理由将数据放入单个表中。另一个论点是应用程序现在可以工作。您真的想在完成工作发现一些需要单独表格的要求吗?

如果您确实决定使用单个表,则使用表分区。由于每个用户都在使用自己的数据,因此可以使用分区将每个用户加载到单独的分区中。虽然对分区有限制(比如没有外键),但这会让访问单个表中的数据和访问原始数据一样快。

于 2012-12-07T15:13:32.493 回答