Heim  >  Artikel  >  Backend-Entwicklung  >  PHP sortiert 100 Millionen Zahlen

PHP sortiert 100 Millionen Zahlen

巴扎黑
巴扎黑Original
2016-11-22 10:05:381213Durchsuche

Teilen Sie es in tausende Teile auf, sortieren Sie sie und fügen Sie sie wieder zusammen.


Erstellen Sie zunächst einen Text mit 100 Millionen QQ-Nummern.

PHP-Code?



//Text von 100 Millionen QQ-Zahlen erstellen (ca. 85~100 Sekunden)

set_time_limit(0);

$fn = ' qq. txt';

$fp = fopen($fn, 'w');

$st = microtime(true);

$l = range(0,10000);

shuffle($l);

foreach ($l as $k=>$v)

{

$arr = range($v*10000 10000,10000*($v 1) 9999);

shuffle($arr);

fputs ($ fp,implode("n", $arr)."n");

unset($arr);

}

echo microtime (wahr)-$st;

?>






Warten Sie ein oder zwei Minuten, bis 100 Millionen zufällige QQs erstellt wurden.

QQ-Nummernbereich ist >10000. Die Dateigröße beträgt ca. 840 MB.



Das Folgende wird in Tausende von Dateien klassifiziert.

Verwenden Sie die Länge der QQ-Nummer als Ordner und die ersten drei Ziffern der QQ-Nummer als Dateinamen.

PHP-Code?


//Klassifizierung der Längenzahl (dauert etwa 360–400 Sekunden)

set_time_limit(0);

$st = microtime(true);

if(!is_dir('qq_no')) mkdir('qq_no');

$file = fopen('qq.txt', 'r');

$i=0;

$end_s = '';

while(!feof($file))

{

$g = 1042*1024;

fseek($file,$g*$i);

$s = fread($file, $ g);

$end = strrpos($s, "n");

$arr_s = $end_s.substr($s, 0, $end) ;

$end_s = substr($s, $end);

$arr = explosion("n", $arr_s);

foreach ($arr as $k=>$v)

{

if($v!='')

{

$tag = "$v[0]$v[1]$v[2]";

                $text_arr[strlen($v)][$tag][] = $v;

}

}

foreach ($text_arr as $k=>$v)

{

$n_dir = ' qq_no/'.$k;

if (!is_dir($n_dir)) mkdir($n_dir);

foreach ($v as $tag=>$val)

{

$n_tf = fopen($n_dir.'/'.$tag.'.txt', 'a ');

fputs($n_tf,implode("n ",$val)."n");

}  

}

unset($text_arr);

$i;

}

echo microtime(true)-$st;

?>

Endlich jede Datei werden sortiert und zusammengeführt.

PHP-Code?



 

// Sortierung abgeschlossen (800~920 Sekunden)

set_time_limit(0);

$st = microtime( true );

$qq_done = fopen('qq_done.txt', 'a ');

$root = 'qq_no'

$dir_array = scandir($root);

foreach ($dir_array as $key=>$val)

{

if ($val != '.' && $val != '..')

$dirs[$val] = scandir($root.'/'.$val);

}

foreach ($dirs as $key=>$val)

{

foreach ( $val as $v)

    {

        if ($v != '.' && $v != '..')

        {

            $file = $root. '/' . $key . '/'. $v;

            $c = file_get_contents($file);

            $arr = explode("n", $c);

            sort($arr);

            fputs($qq_done, implode("n",$arr));

            unlink($file);

        }

    }

    rmdir($root. '/' . $key);

}

rmdir($root);

 

echo  microtime( true)-$st;

 

?>

   



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn