2013-10-14 231 views
0

我正在构建一个平台,收集并解析包含5000行平均值和40列的“csv”文件;文件可以由任何注册用户上传,所以理论上应该没有限制可以上传和存储多少文件(假设我每天没有超过20次上传)。这些文件正在被一个自定义的PHP解析器解析,这个解析器效率很高,但问题来了:存储。 特别是,我想将这些数据存储在MySQL数据库中供以后使用:我应该如何组织我的数据库?我应该创建一个包含每个文件的行的表格,每个单元格包含原始文件每列的内容吗?还是应该为文件中的每一行插入一行? 第一个对我来说似乎更好一些,因为第二个解决方案构建的行数很多,但也效率较低,因为任何时候我必须提取数据库中的任何数据,我将不得不再解析整个blob,然后解压缩我需要的数据PHP/MYSQL在数据库中存储大型数据集

鉴于我不能在PHP数组中存储数据,因为如果有太多的用户同时连接,会导致内存不足,这将是这种情况下的最佳解决方案?

+0

是否所有的CSV文件都有相同的列? –

+0

数据库中的行数几乎没有意义。对于几乎任何可想象的解决方案,将数据存储在每行CSV中的行将比将整个CSV存储在单行中好得多。 – Fluffeh

+0

是的,CSV具有所有相同的列 – Socket2104

回答

2

由于所有文件都有相同的列,因此应将它们存储在一个表中,并添加另一个附加列(可能引用第二个表,每个上载一行)以唯一标识一组行。

例如为:

rowId, setId, col1, col2, ... 
1, 1, 'abc', 'def', ... 
2, 1, 'abc', 'def', ... 
3, 1, 'abc', 'def', ... 
4, 2, 'abc', 'def', ... 
5, 2, 'abc', 'def', ... 
6, 2, 'abc', 'def', ... 

这是该数据可能看起来像2组,每组3行。

+0

假设每天有20个文件,每个文件有3000行(现在最糟糕的情况),它每天将产生大约50/60000个新行,每月大约有200万行。 这可能会在几个月内成为问题,我错了吗? – Socket2104

+0

我不知道,取决于你想要对这些行做什么(解释我们会帮助我们回答这个问题)。无论哪种方式,将表格作为一行存储是一种错误的方式,并不会真正改变需要存储的数据总量......它只会使数据分析,排序等效率下降。 ,并让我想知道你为什么试图使用数据库。 你想用数据做什么? –

+0

我会说同样的事情。首先,40列对我来说看起来不算太多。至于存储你的数据,这一切都取决于你的服务器存储限制(可以随时升级,几乎没有限制),并且需要搜索/解析这些数据。如果一旦存储,它很少被访问,你不需要担心性能问题。您还可以在数据库中存储对csv文件的引用,并将csv保存在文件系统中。 – Joao

相关问题