我正在構建一個腳本,需要對每個文件中每個單詞的出現次數進行計數,大約有2000個文件,每個大約500KB。PHP海量內存使用(30+ GB)使用關聯數組
因此,這是1GB的數據,但MySQL使用超過30+ GB(然後它用完和結束)。
我這種情況的原因找到了我的自由使用的關聯數組,它看起來像這樣:
for($runc=0; $runc<$numwords; $runc++)
{
$word=trim($content[$runc]);
if ($words[$run][$word]==$wordacceptance && !$wordused[$word])
{
$wordlist[$onword]=$word;
$onword++;
$wordused[$word]=true;
}
$words[$run][$word]++; // +1 to number of occurances of this word in current category
$nwords[$run]++;
}
$運行是當前類別。
您可以看到,要計算單詞的數量,我只是將它們添加到關聯數組$ words [$ run] [$ word]中。隨着每個文件類別中每個單詞的每次出現而增加。
然後$ wordused [$ word]用於確保一個單詞不會被添加兩次到單詞列表。
$ wordlist是一個簡單的數組(0,1,2,3等),其中包含使用的所有不同單詞的列表。
這消耗了巨大的內存量。有沒有更有效的方法來做到這一點?我正在考慮使用MySQL內存表,但我想在PHP中做所有事情,所以它很快速和便攜。
我不明白你顯示的代碼可能會導致MySQL使用大量內存嗎? –
我沒有那麼多關於我的數據,所以我無法測試它:D。但是,PHP的array_count_values方法如何與內存和處理進行堆棧呢? –
結合array_count_values是好的,我會用它來數組合並排序後的單詞。 – Alasdair