2011-06-29 68 views
0

我有一個Django站點與MySQL數據庫後端運行。我接受來自其中一個管理員用戶的大量上傳,以批量導入一些數據。數據的格式與它在數據庫中需要的格式略有不同,所以我需要做一些解析。MySql批量導入而不寫入文件到磁盤

我希望能夠將此數據轉換爲csv並將其寫入cStringIO對象,然後只需使用mysql的批量導入命令來加載該文件。我寧願先跳過將文件寫入磁盤,但似乎無法找到解決方法。在過去我基本上已經用postgresql完成了這件事,但不幸的是這個項目在mysql上。

短:我可以採取像對象存儲文件,並以某種方式使用MySQL的批量導入操作

回答

1

如果通過「批量導入」,您的意思是LOAD DATA [LOCAL] INFILE,那麼,不,首先將數據寫入某個文件是沒有辦法的,該死的。你(和我)真的很想直接從數組中寫表。

但是,一些操作系統,如Linux,允許一個RAM駐留文件系統,緩解一些傷害。我不夠了解系統管理員知道如何建立這些人之一;我必須讓我的ISP的技術支持爲我做。我發現an article可能有有用的信息。

HTH

+0

不幸的。我有能力建立一個內存文件系統,但它是我不想處理的移動部分,所以我可能不會。寫入磁盤的成本可能不會那麼糟糕。我只是希望你可以像postgresql的COPY操作一樣處理它 – John

+0

是的,這並不壞。而且我只需要每天做一次。但是每次看到這段代碼時,我都得磨牙,努力地吞嚥。這個遺漏是MySQL中的一個大漏洞,imo。 –

2

有一位優秀的教程叫Generator Tricks for Systems Programmers,解決處理大的日誌文件,這是類似,但不完全相同,你的情況。只要您只需訪問流中當前(可能還有以前的)數據即可執行所需的轉換,這可能適用於您。

我在一些答案中提到了這個寶石,因爲我認爲它引入了一個不同的這種思維方式很有價值。有一個伴侶片,A Curious Course on Coroutines and Concurrency,可以嚴重扭曲你的頭。

+0

+1 great links! –

相關問題