Inhaltsverzeichnis
Einführung
Gedanken
Praktische Bedienung
生成测试文件
分割文件
Heim Backend-Entwicklung PHP-Problem Wie finde ich in PHP die gleichen Datensätze in zwei Dateien?

Wie finde ich in PHP die gleichen Datensätze in zwei Dateien?

May 31, 2021 am 09:40 AM
php 海量数据 算法

In diesem Artikel erfahren Sie, wie Sie mit PHP dieselben Datensätze in zwei Dateien finden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Wie finde ich in PHP die gleichen Datensätze in zwei Dateien?

Einführung

Angenommen, zwei Dateien a und b mit x- bzw in ihnen ?

Gedanken

  • Die Hauptschwierigkeit bei der Bewältigung dieses Problems besteht darin, dass diese riesigen Daten nicht auf einmal in den Speicher eingelesen werden können.

  • Wenn dies nicht möglich ist gleichzeitig in den Speicher eingelesen werden, ist es dann möglich, es mehrmals zu berücksichtigen? Wenn es möglich ist, wie können wir denselben Wert berechnen, nachdem wir ihn mehrmals gelesen haben?

  • Wir können das Teilen-und-Herrsche-Denken nutzen, um das Große auf das Kleine zu reduzieren. Wenn die Werte derselben Zeichenfolge nach dem Hashing gleich sind, können wir erwägen, Hash-Modulo zu verwenden, um die Datensätze auf n Dateien zu verteilen. Wie bekomme ich dieses N? PHP verfügt über 100 MB Speicher und das Array kann etwa 1 Million Daten speichern. Wenn man also bedenkt, dass die Datensätze a und b nur 1 Milliarde Zeilen haben, muss n mindestens größer als 200 sein.

  • Zu diesem Zeitpunkt gibt es 200 Dateien. Die gleichen Datensätze müssen sich in derselben Datei befinden und jede Datei kann in den Speicher eingelesen werden. Dann können Sie nacheinander dieselben Datensätze in diesen 200 Dateien finden und sie dann in derselben Datei ausgeben. Das Endergebnis sind die gleichen Datensätze in den beiden Dateien a und b.

  • Es ist einfach, denselben Datensatz in einer kleinen Datei zu finden. Verwenden Sie einfach jede Zeile von Datensätzen als Schlüssel der Hash-Tabelle und zählen Sie die Anzahl der Vorkommen des Schlüssels >= 2.

Praktische Bedienung

1 Milliarde Dateien sind zu groß. Erreichen Sie einfach den praktischen Zweck.

Die Problemgröße wird reduziert auf: 1 MB Speicherlimit, a und b haben jeweils 100.000 Datensatzzeilen. Das Speicherlimit kann durch PHPs ini_set('memory_limit', '1M'); begrenzt werden. ini_set('memory_limit', '1M');来限制。

生成测试文件

生成随机数用于填充文件:

/**
 * 生成随机数填充文件
 * Author: ClassmateLin
 * Email: classmatelin.site@gmail.com
 * Site: https://www.classmatelin.top
 * @param string $filename 输出文件名
 * @param int $batch 按多少批次生成数据
 * @param int $batchSize 每批数据的大小
 */
function generate(string $filename, int $batch=1000, int $batchSize=10000)
{
    for ($i=0; $i<$batch; $i++) {
        $str = &#39;&#39;;
        for ($j=0; $j<$batchSize; $j++) {
            $str .= rand($batch, $batchSize) . PHP_EOL; // 生成随机数
        }
        file_put_contents($filename, $str, FILE_APPEND);  // 追加模式写入文件
    }
}

generate(&#39;a.txt&#39;, 10);
generate(&#39;b.txt&#39;, 10);
Nach dem Login kopieren

分割文件

  • a.txt, b.txt通过hash取模的方式分割到n个文件中.

/**
 * 用hash取模方式将文件分散到n个文件中
 * Author: ClassmateLin
 * Email: classmatelin.site@gmail.com
 * Site: https://www.classmatelin.top
 * @param string $filename 输入文件名
 * @param int $mod 按mod取模
 * @param string $dir 文件输出目录
 */
function spiltFile(string $filename, int $mod=20, string $dir=&#39;files&#39;)
{
    if (!is_dir($dir)){
        mkdir($dir);
    }

    $fp = fopen($filename, &#39;r&#39;);

    while (!feof($fp)){
        $line = fgets($fp);
        $n = crc32(hash(&#39;md5&#39;, $line)) % $mod; // hash取模
        $filepath = $dir . &#39;/&#39; . $n . &#39;.txt&#39;;  // 文件输出路径
        file_put_contents($filepath, $line, FILE_APPEND); // 追加模式写入文件
    }

    fclose($fp);
}

spiltFile(&#39;a.txt&#39;);
spiltFile(&#39;b.txt&#39;);
Nach dem Login kopieren
  • 执行splitFile函数, 得到如下图files

    Testdatei generieren
Zufallszahlen generieren, um die Datei zu füllen:

/**
 * 查找一个文件中相同的记录输出到指定文件中
 * Author: ClassmateLin
 * Email: classmatelin.site@gmail.com
 * Site: https://www.classmatelin.top
 * @param string $inputFilename 输入文件路径
 * @param string $outputFilename 输出文件路径
 */
function search(string $inputFilename, $outputFilename=&#39;output.txt&#39;)
{
    $table = [];
    $fp = fopen($inputFilename, &#39;r&#39;);

    while (!feof($fp))
    {
        $line = fgets($fp);
        !isset($table[$line]) ? $table[$line] = 1 : $table[$line]++; // 未设置的值设1,否则自增
    }

    fclose($fp);

    foreach ($table as $line => $count)
    {
        if ($count >= 2){ // 出现大于2次的则是相同的记录,输出到指定文件中
            file_put_contents($outputFilename, $line, FILE_APPEND);
        }
    }
}
Nach dem Login kopieren

Datei aufteilen

  • Fügen Sie a.txt, b.txt durch Hash-Modulo ein in n Dateien.

  • /**
     * 从给定目录下文件中分别找出相同记录输出到指定文件中
     * Author: ClassmateLin
     * Email: classmatelin.site@gmail.com
     * Site: https://www.classmatelin.top
     * @param string $dirs 指定目录
     * @param string $outputFilename 输出文件路径
     */
    function searchAll($dirs=&#39;files&#39;, $outputFilename=&#39;output.txt&#39;)
    {
        $files = scandir($dirs);
    
        foreach ($files as $file)
        {
            $filepath = $dirs . &#39;/&#39; . $file;
            if (is_file($filepath)){
                search($filepath, $outputFilename);
            }
        }
    }
    Nach dem Login kopieren
  • Führen Sie die Funktion splitFile aus und erhalten Sie 20 Dateien im Verzeichnis files, wie unten gezeigt.

Duplikate Datensätze finden
  • Jetzt müssen wir dieselben Datensätze in 20 Dateien finden. Tatsächlich müssen wir dieselben Datensätze in einer Datei finden und 20 Mal arbeiten.

Die gleichen Datensätze in einer Datei finden:

Nach dem Login kopieren
Die gleichen Datensätze in allen Dateien finden:
🎜🎜rrreee🎜🎜🎜Da nun das Platzproblem bei der Verarbeitung großer Dateien gelöst ist, was ist mit dem Zeitproblem? Eine einzelne Maschine kann es verarbeiten, indem es den Multi-Core der CPU nutzt. Wenn dies nicht ausreicht, kann es von mehreren Servern verarbeitet werden. 🎜🎜🎜🎜Vollständiger Code🎜rrreee🎜Empfohlenes Lernen: 🎜php-Video-Tutorial🎜🎜🎜

Das obige ist der detaillierte Inhalt vonWie finde ich in PHP die gleichen Datensätze in zwei Dateien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1669
14
PHP-Tutorial
1273
29
C#-Tutorial
1256
24
PHP: Eine Schlüsselsprache für die Webentwicklung PHP: Eine Schlüsselsprache für die Webentwicklung Apr 13, 2025 am 12:08 AM

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

PHP vs. Python: Verständnis der Unterschiede PHP vs. Python: Verständnis der Unterschiede Apr 11, 2025 am 12:15 AM

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP in Aktion: Beispiele und Anwendungen in realer Welt PHP in Aktion: Beispiele und Anwendungen in realer Welt Apr 14, 2025 am 12:19 AM

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Apr 14, 2025 am 12:12 AM

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

Php gegen andere Sprachen: Ein Vergleich Php gegen andere Sprachen: Ein Vergleich Apr 13, 2025 am 12:19 AM

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

See all articles