0
我必須獲取一個包含兩列數千萬記錄的表格 - id
和name
,對於每個名稱進行爆炸操作,然後將每個爆炸元素與其ID一起保存到文件中。 id-keyword
對必須是唯一的。將mysql錶轉換爲數組
什麼是最快,最有記憶效率的方法呢?
我一直在思考這樣的事情:
$query = $pdo -> prepare('SELECT id, name FROM table');
$query -> execute();
$time = microtime(true);
if (file_exists('test.txt')) {
unlink('test.txt');
}
$fh = fopen('test.txt', 'a');
while ($result = $query -> fetch()) {
$tokens = explode(" ", $result['name']);
foreach ($tokens as $token) {
fwrite($fh, $result['id'] . ' ' . $token . PHP_EOL);
}
}
fclose($fh);
echo microtime(true) - $time;
- 但它需要在15秒內實現這一目標,這是方法來長,和數組是不是唯一的。
- 我還可以創建一個字作爲密鑰的數組,其中包含ID作爲鍵,這將解決uniqness問題的數組,但整體結構肯定會過大,以適應到內存,並在合理的時間。
- 我可以創建數組達到幾條記錄並不時地執行
fwrite
,但是再次,這些行不會是唯一的。
我不想在數據庫層上這樣做 - 數據庫邏輯越少越好,而且我也不想執行更重的數據庫操作。
我該怎麼辦?
你爲什麼要炸開空間的名字?這就是你在文件中引入重複行的方式。請注意,在內部循環中甚至沒有使用'$ token'變量。你想要做什麼? – jeroen
對不起,我犯了一個錯字,我編輯了代碼。我試圖從列名中獲取包含所有單個單詞的數組以及相應的名稱ID,而不重複。 – user99999
我還是不明白你在做什麼;你可以很容易地過濾'$ tokens',這樣所有的id-word組合都將是唯一的(假設id是唯一的,以......開始),並且你可以跟蹤哪些記錄已經被處理,這樣你只需要做它曾經。 – jeroen