2013-10-14 401 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

相關問題