簡體   English   中英

使用PHP在MySQL中加載沒有文件的數據infile

[英]load data infile without file in mysql with php

我每30秒以流媒體方式接收一次文件。 文件最多可以包含40列和50,000行。 這些文件是txt文件,並且制表符分開。 現在,我正在臨時保存文件,將包含裝入數據文件的內容保存到數據庫中的臨時表中,然后再刪除文件。

我想避免保存和刪除過程,而是直接將數據保存到數據庫中。 流是這里的$output

protected function run(OutputInterface $output)
{
    $this->readInventoryReport($this->interaction($output));
}

我一直在搜尋所有“性能是一個大問題”,這是證明性的答案,但是我一直沒有找到一種很好的方法來完成此任務,除非將數據保存到文件中並在文件中使用加載數據。 我需要快速提供內容,並將其保存到臨時表后再使用這些內容。 (使用內容更新其他表...)

是否有解決此問題的好方法,還是將文件保存和刪除方法以及文件中的加載數據比其他解決方案更好?

我正在其上運行的服務器具有SSD和32GB的RAM。

LOAD DATA INFILE是將低噸位數據吞入MySQL的最快方法。

您可以編寫一個自己的php程序,該程序將使用准備好的語句等在將行插入數據庫中方面做得很好。 如果您安排每兩百行執行一次COMMIT ,並使用准備好的語句,並仔細地編寫代碼,這將相當快,但不如LOAD DATA INFILE快。 為什么? 單個行操作必須序列化到網絡線路上,然后反序列化,並一次處理一次(或兩次或十次)。 LOAD DATA只是在本地收集數據。

聽起來您有一台不錯的MySQL服務器計算機。 但是序列化仍然是瓶頸。

每30秒記錄50K條記錄,是嗎? 好多啊! 這些數據是否多余? 也就是說,后面一批數據中的任何行是否會覆蓋前面一批中的行? 如果是這樣,您也許可以編寫一個程序來跳過已經過時的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM